プロジェクト

全般

プロフィール

Bug(バグ) #2299

isao sano さんが13年以上前に更新

h3. Overview (現象) 

 紹介文を書くと、書いたユーザーと書かれたユーザー、そして書かれたユーザーが招待を出したユーザーが退会動作を行うと500エラーが発生して退会できない。 
 書いたユーザーが招待を出したユーザーは退会出来ます。 
 また、退会動作は管理画面、ユーザー側どちらから行っても再現いたします。 

 h3. 報告元 

 http://sns.openpne.jp/diary/26651 
 <pre> 
 ■現象 
 会員の退会/強制退会を実行すると、500エラーが発生して退会できない。 

 ■環境 
 OpenPNE 3.6 beta11 

 ■再現手順 
 1.会員Aが会員Bを招待する 
 2.会員Bで登録&ログインして、会員A向けにフレンド紹介文を作成する 
 3.会員Aが会員Cを招待する 
 4.会員Cで登録&ログインする 
 5.管理画面を開いて、「メンバー管理」から会員Cを強制退会する 
 → 500エラー画面が表示される。 
 6.会員Cで自主退会しても同様に500エラーとなる 

 Apacheのエラーログには以下のエラーメッセージが記録されます。 
 [Thu Jul 21 23:50:20 2011] [error] [client xxx.xxx.xxx.xxx] SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`beax`.`intro_friend`, CONSTRAINT `intro_friend_member_id_to_member_relationship_member_id_to` FOREIGN KEY (`member_id_to`) REFERENCES `member_relationship` (`member_id_to`)), referer: http://xxx.xxx.xxx.xxx/pc_backend.php/member/delete/id/3 

 ■原因(推測) 
 intro_friendテーブルの以下の外部キー定義に問題があるように思います。 
 CONSTRAINT `intro_friend_member_id_to_member_relationship_member_id_to` FOREIGN KEY (`member_id_to`) REFERENCES `member_relationship` (`member_id_to`) 

 再現手順を行うと、以下のようなレコード構成になります。 

 memberテーブル 
 ・レコード1:会員A 
 ・レコード2:会員B 
 ・レコード3:会員C 

 member_relationshipテーブル 
 ・レコード1:A <- B 
 ・レコード2:B <- A 
 ・レコード3:A <- C 
 ・レコード4:C <- A 

 intro_friendテーブルのレコード 
 ・レコード1:A <- B 

 上記状態で会員Cを削除すると、以下のように削除に失敗します。 

 memberテーブルのレコード3削除する 
 → DELETE ON CASCADE定義により、member_relationshipテーブルのレコード3と4が削除される 
 → intro_friendテーブルの外部キー定義により、member_relationshipテーブルのレコード3の削除に失敗する(Aが外部キーとして参照されている) 

 </pre> 

 h3. 再現バージョン 

  * OpenPNE3.6beta11 
  * beta12 
  * beta13 

  * opIntroFriendPlugin-0.9.2.1 

 h3. 再現手順 

 1. ユーザーBがフレンドのユーザーAの紹介文を書く ユーザーAでログインし、ユーザーBに招待メールを送る 
 2. ユーザーBでログインし、ユーザーAの紹介文を書く 
 3. ユーザーAがユーザーCに招待メールを送る 
 3. 4. ユーザーCでプロフィール登録を行う 
 4. 5. 管理画面よりユーザーCを強制退会させる 
 5. 6. 500エラーが出て退会できない 

 手順3を行わず、手順2で送信した招待を取り消そうとしても500エラーが発生する 手順4を行わず、手順3で送信した招待を取り消そうとしても500エラーが発生する 

 h3. Causes (原因) 

 バグが発生した原因を記入 

 h3. Way to fix (修正内容) 

 修正内容を記入

戻る