Bug(バグ) #1833
完了個体識別番号登録必須制から個体識別番号登録任意/取得しない ような設定にした場合、PC版のみ登録が完了しているメンバーがログインできない
100%
説明
Overview (現象)¶
以下のような手順を行った場合、SNSに登録できないメールアドレスが生まれてしまう
1. 「メンバー登録時の携帯個体識別番号取得設定」を「# PC・携帯登録時に携帯個体識別番号の登録を必須にする」にする
2. sns@example.com を招待する
3. PC版でメンバー登録を行い、携帯メールアドレス登録画面で操作を中断する
4. 「メンバー登録時の携帯個体識別番号取得設定」を「# PC・携帯登録時に携帯個体識別番号の登録を必須にする」以外に変更する
5. 操作を中断したsns@example.com が仮登録状態のままになり、ログインもできず・招待も行えないメールアドレスになる
Causes (原因)¶
This issue is caused by dead redirecting to registerEnd action in login process of 3.6.
In 3.4.x and before, login action checks status of authenticated member and make redirect to registerInput action or registerEnd action if it is needed.
However, in 3.6.x, because it obsoletes using credentials in registration process, registering member fails to authenticate. That member is throw out before executing registerEnd action.
ログイン処理における registerEnd アクションへのリダイレクトが、 3.6.x ではおこなわれなくなっていたことが原因。
3.4.x までは、ログイン処理において、認証状態にしたメンバーの現在の状態を確認したうえで「プロフィール登録」(registerInput)、「登録完了」(registerEnd)アクションへの遷移をおこなっていた。
しかし、 3.6.x から登録処理に用いていたクレデンシャルを廃止していたことに伴い、登録中のメンバーはこの分岐処理に至る前の認証処理に失敗するようになってしまっており、 registerEnd アクションを実行することができなくなってしまった。
Way to fix (修正内容)¶
Checking for redirecting to registerBegin and registerEnd is now executed on any authentication state.
registerBegin, registerEnd アクションへリダイレクトするための分岐処理は、認証状態に関わらずおこなうようにした。
Masato Nagasawa さんが13年以上前に更新
しかし、手順5の後に招待メールの再送及びログインは可能。
3.7にて確認しましたが、
チケットの説明の通りログインできず、招待メールも送れない状態である事を確認。
取得対象外の端末に変更された場合は本登録状態にする修正を行います。
Masato Nagasawa さんが13年以上前に更新
これとは逆の問題もあって、
取得しない状態から必須にした場合に
未登録のメンバーでもログインできてしまう問題があり、
登録を促すかどうか検討する必要があります。
テスト¶
PC側から携帯メールアドレス登録画面で操作を中断した状態で、
is_active の値を操作してテストを行います。
区分1 | 区分2 | 期待結果 | 結果 |
PC側でログイン | 「必須(PC/携帯)」から変更なし | ログインできない | ○ |
「必須(PC/携帯)」から「必須(携帯)」に変更 | ログインできる | ○ | |
「必須(PC/携帯)」から「任意」に変更 | ログインできる | ○ | |
「必須(PC/携帯)」から「取得しない」に変更 | ログインできる | ○ | |
「取得しない」から「必須(PC/携帯)」に変更 | ログインできない | ○ | |
必須(PC/携帯)」から「取得しない」に変更後、 プロフィールの登録をしていない状態でログイン |
ログインできない | ○ | |
携帯でログイン | 「必須(PC/携帯)」から変更なし | ログインできない | ○ |
「必須(PC/携帯)」から「必須(携帯)」に変更 | ログインできる | ○ | |
「必須(PC/携帯)」から「任意」に変更 | ログインできる | ○ | |
「必須(PC/携帯)」から「取得しない」に変更 | ログインできる | ○ | |
「必須(携帯)」から「必須(PC/携帯)」に変更 | ログインできない | ログインできる | |
「取得しない」から「必須(PC/携帯)」に変更 | ログインできない | ログインできる | |
PC側で新規登録 | 「必須(PC/携帯)」にして新規登録処理を行う | 携帯登録のフローが存在する | ○ |
PC側で新規登録 | 「必須(携帯)」にして新規登録処理を行う | 携帯登録のフローが存在しない | ○ |
PC側で新規登録 | 「任意」にして新規登録処理を行う | 携帯登録のフローが存在しない | ○ |
PC側で新規登録 | 「取得しない」にして新規登録処理を行う | 携帯登録のフローが存在しない | ○ |
Masato Nagasawa さんが13年以上前に更新
is_active = false のメンバーの場合、
パスワード再発行ができない状態となっている事を確認しましたが、
opAuthMailAddressPlugin 側の問題であるためこのチケットでは対応しません。
Masato Nagasawa さんが13年以上前に更新
- ステータス を Pending Fixing(修正待ち) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 aae1e516070c72204f57298faacf7e87850778c1 で適用されました。
Masato Nagasawa さんが13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Accepted(着手) に変更
不具合が発生していない3.4の実装を確認したところ、この実装は適切でないと感じました。
コミットを取り消し、別の実装案を検討します。
以下メモ
opSecurityUser::isSNSMember() で is_active のチェックをしており、
このチェックをはずす事でログインが可能になることが分かりました。
ただ、この変更による影響で他の処理に問題が起こる可能性があります。
そもそもis_activeをどういった目的で使用するべきなのか自分が把握できていないため、
この対処が正しいかどうか分かりません。
匿名ユーザー さんが13年以上前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
更新履歴 9f8aaa1e4317f5d6ba958d80bfa4f152f01111df で適用されました。
Kousuke Ebihara さんが13年以上前に更新
本件は、いままでおこなわれていたログイン時の登録完了アクションへのリダイレクト処理がおこなわれなくなっていたのが原因であるので、単にこれまでどおりその処理がおこなわれるよう修正しました。
Naoya Tozuka さんが13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
海老原さんの変更( 9f8aaa1e )で良いと思います。
Fumie Toyooka さんが約13年前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
テストOKです。