Firebase Authenticationで多要素認証を実装しようとしていて発見した、Firebaseコンソールの不具合です。
準備
まずはテスト用の電話番号を登録します。SMSを受信できるスマホや携帯電話が2台以上あれば、テスト用の電話番号は不要かもしれません。
テスト用電話番号の登録手順は以下のとおり。この手順を説明した記事は少なそうだったので、念のため記載します。
- FirebaseコンソールでAuthenticationを選択。
- 画面上部のタブで「ログイン方法」を選択。
- 「SMS多要素認証」の「変更」を押下。
- ダイアログの「有効にする」をチェックして
- 「テスト用の電話番号」を押下するとダイアログが伸びてテスト用の電話番号の設定が現れます。
- 適当な電話番号(日本なので"+81aabbbbcccc")と確認コード(10進数6桁)を入力して、
- 「保存」を押下。
発生手順
手順の際現にはSMS認証による多要素認証をFirebase Authenticationで実装したアプリが必要です。ない場合はFirebaseのquickstart-jsでも再現できます。
以下にquickstart-jsによる再現手順を示します。
- SMS multi-factor authenticationを選択。
- 登録してある任意のアカウントのEメールアドレスとパスワードを入力して「SIGN IN」を押してログイン。
- 「ENROLL」を押下して第2認証のSMS認証の登録を開始。
- reCAPTCHAをチェックしたら「SEND CODE」を押下。ここで"Firebase: Error (auth/requires-recent-login)."が発生したらいったんSIGN OUTし、手順2からログインしなおし。
- アプリquickstart-jsに戻ります。手順10でユーザアカウントを編集しているので、ログアウトしているはずです。ログアウトしていなかったら「SIGN OUT」を押下してログアウトします。
- もう一度ログインします。今度は手順3~7で追加した第2認証が必要になっていますので、これも認証します。
現象
アプリquickstart-jsでログインしてみると、第2認証のSMS認証の表示名が「N/A」に変わっています。
複数の電話番号を使えば1人のユーザに対して複数のSMS認証を追加できますが、すべてのSMS認証の表示名が「N/A」に変わってしまいます。
第2認証にワンタイムパスワードを使用している場合、ワンタイムパスワードだけ影響をうけません。SMS認証のみで発生します。
最後に
Firebaseのライブラリでいうと、MultiFactorInfo.displayNameがnullになっているようです。表示名を設定する手段はMultiFactorUser.enroll()しか見つからなかってので、消えてしまった表示名を復活させるには、SMS認証をいったん消して再登録するしかないようです。
一応Firebaseのサポートには報告し、「再現できたから開発チームに報告しておく」と回答をいただきました。そのうち修正されるでしょうが影響を受けるのは開発者のみなので、優先順位は低く対応が遅い可能性があります。Firebase Authenticationで多要素認証を実装・デバッグしていると混乱しかねない現象ですので、ご注意ください。
ちなみにFirebaseのサポートとのやり取りには3週間以上かかっています。
0 件のコメント:
コメントを投稿