Bug(バグ) #2599
完了メンバー登録画面からOpenIDの認証をおこなうと、プロバイダの認証後にプロフィール登録画面ではなくメンバー登録画面に遷移してしまう
100%
説明
Overview (現象)¶
メンバーからのSNSの招待から登録画面を開き、メンバー登録画面(member/register)でOpenIDを選択し認証をおこなうと、プロフィール登録画面(/member/registerInput)ではなくメンバー登録画面に戻ってしまう。
Environment (再現バージョン)¶
OpenPNE 3.6.0
Way to repro (再現手順)¶
1. メンバーAが友人招待 (/member/invite)からSNS未登録のメンバーBのメールアドレスに招待メールを送る
2. メンバーBが 1 で送信されたメールをひらき、本文にあるメンバー登録URLにアクセスする
3. メンバー登録画面(member/register)が表示されるので、「OpenID で登録する」のフォームに OppenID のURLを入力し、「この OpenID を使用して登録する」ボタンを押下する
4. プロバイダ側の認証が表示されるので、通信を許可する設定にする
5. プロバイダ側の設定後、遷移先がプロフィール登録画面(/member/registerInput)ではなくメンバー登録画面(member/register)に戻る
OpenIDの認証完了後、プロフィール登録画面(/member/registerInput)に遷移するよう変更をお願いします
Yuya Watanabe さんがほぼ13年前に更新
- ステータス を New(新規) から Accepted(着手) に変更
原因¶
下記コード部で20行目や21行目では登録開始あるいは終了かどうかでリダイレクトを行なっているが,13行目でlogin()処理を行なっている.これは新規登録時だとloginできない(登録されていないため)ので20行目および21行目に到達することができず,プロフィール登録ができない状態となっている.
apps/pc_frontend/modules/OpenID/actions/registerOpenIDConfirmAction.class.php
11 class RegisterOpenIDConfirmAction extends sfAction 12 { 13 public function execute($request) 14 { 15 $this->forward404Unless($request->hasParameter('authMode')); 16 $this->getUser()->setCurrentAuthMode('OpenID'); 17 18 if ($uri = $this->getUser()->login()) 19 { 20 $this->redirectIf($this->getUser()->isRegisterBegin(), $this->getUser()->getRegisterInputAction()); 21 $this->redirectIf($this->getUser()->isRegisterFinish(), $this->getUser()->getRegisterEndAction()); 22 $this->redirectIf($this->getUser()->isMember(), $uri); 23 } 24 25 $this->getUser()->setFlash('error', 'Invalid.'); 26 $this->redirect('member/register?token='.$request['token']); 27 } 28 }
修正案¶
login処理を行う前に新規登録状態かどうかのリダイレクト処理を行う.
diff --git a/apps/pc_frontend/modules/OpenID/actions/registerOpenIDConfirmAction.class.php b/apps/pc_frontend/modules/OpenID/actions/registerOpenIDConfirmAction.class.php index 3f99c6c..4003f86 100644 --- a/apps/pc_frontend/modules/OpenID/actions/registerOpenIDConfirmAction.class.php +++ b/apps/pc_frontend/modules/OpenID/actions/registerOpenIDConfirmAction.class.php @@ -15,10 +15,10 @@ class RegisterOpenIDConfirmAction extends sfAction $this->forward404Unless($request->hasParameter('authMode')); $this->getUser()->setCurrentAuthMode('OpenID'); + $this->redirectIf($this->getUser()->isRegisterBegin(), $this->getUser()->getRegisterInputAction()); + $this->redirectIf($this->getUser()->isRegisterFinish(), $this->getUser()->getRegisterEndAction()); if ($uri = $this->getUser()->login()) { - $this->redirectIf($this->getUser()->isRegisterBegin(), $this->getUser()->getRegisterInputAction()); - $this->redirectIf($this->getUser()->isRegisterFinish(), $this->getUser()->getRegisterEndAction()); $this->redirectIf($this->getUser()->isMember(), $uri); }
Yuya Watanabe さんがほぼ13年前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
Kousuke Ebihara さんがほぼ13年前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
Yuma Sakata さんがほぼ13年前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
テストOKです。