今回は、Firebase Authenticationサービスのうち、以下のことについてまとめました。
- メール/パスワードによるサインインから、メールアドレスを変更したらどうなるか。
- Googleなどのプロバイダー別サインインから、メールアドレスを変更したらどうなるか。
Firebase Authenticatonによる認証機能の基本的な実装は、参考記事も多く存在していますが、上記のようにメールアドレスを変更されるとどうなるのか分からなかったので調べてみました。
前提
今回はこのような認証機能を持つアプリを想定しています。
- メールアドレス認証を必要とする
- Googleなどの認証プロバイダー別サインインに対応
- アプリ内でメールアドレス・パスワード変更に対応
メール/パスワードによるサインインからメールアドレスを変更
メールパスワードによるサインインから、メールアドレスを変更しようとすると、下図のような流れになります。
こちらは公式サイトにも記載ある通りで、
- ユーザー再認証:
reauthenticateWithCredential()
- メールアドレス更新:
updateEmail()
- 認証メールを開いて、メールアドレスを認証
上記の手順を踏んでメールアドレス認証を行えば変更完了です。
プロバイダー別サインインからメールアドレスを変更
次に、プロバイダー別サインインからメールアドレスを変更してみました。
今回はGoogleサインインで試したときの挙動を下図に示します。
こちらは自分の思っていた動きと異なりました。
- メールアドレス更新:
updateEmail()
- パスワードリセットメール発行:
sendPasswordResetEmail()
- パスワードリセットメールを開いて、新パスワードを設定
1.メールアドレス更新: updateEmail()
の際、Firebase Authenticationページで確認した限りでは、メールアドレスは新メールアドレスに更新されておりましたが、下図のようにプロバイダー情報がGoogleのままでした。
そのため、パスワードリセットメールを発行して、メールのリンクより、パスワードを再設定してあげる必要がありました。
※これはすなわち、Googleサインイン用パスワードがそのまま受け継がれることはなかったということ。
パスワード再設定後は、メール/パスワードによるサインインに対応したアカウントに切り替わりました。
「認証プロバイダーによるサインインからのメールアドレス変更を禁止」してしまうのも手
現在製作中のアプリは、パスワードリセットメールを発行して対応しておりますが、この手続きはユーザーにとって望ましいものではないかもしれません。
そのため、「認証プロバイダーによるサインインからのメールアドレス変更を禁止」してしまうのも手かもしれません。
さいごに
セキュリティ面に関わる重要度の高い部分のため、理解の相違や改良点などありましたらご連絡下さいますと幸いです。