19
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Firebase Authentication】メールアドレス変更時の挙動まとめ【図解付き】

Posted at

今回は、Firebase Authenticationサービスのうち、以下のことについてまとめました。

  1. メール/パスワードによるサインインから、メールアドレスを変更したらどうなるか。
  2. Googleなどのプロバイダー別サインインから、メールアドレスを変更したらどうなるか。

Firebase Authenticatonによる認証機能の基本的な実装は、参考記事も多く存在していますが、上記のようにメールアドレスを変更されるとどうなるのか分からなかったので調べてみました。

前提

今回はこのような認証機能を持つアプリを想定しています。

  • メールアドレス認証を必要とする
  • Googleなどの認証プロバイダー別サインインに対応
  • アプリ内でメールアドレス・パスワード変更に対応

メール/パスワードによるサインインからメールアドレスを変更

メールパスワードによるサインインから、メールアドレスを変更しようとすると、下図のような流れになります。

Flutter-メール_パスワードサインイン (3).png

こちらは公式サイトにも記載ある通りで、

  1. ユーザー再認証:reauthenticateWithCredential()
  2. メールアドレス更新: updateEmail()
  3. 認証メールを開いて、メールアドレスを認証

上記の手順を踏んでメールアドレス認証を行えば変更完了です。

プロバイダー別サインインからメールアドレスを変更

次に、プロバイダー別サインインからメールアドレスを変更してみました。

今回はGoogleサインインで試したときの挙動を下図に示します。
こちらは自分の思っていた動きと異なりました。

Flutter-Googleサインインによるユーザー認証.png

  1. メールアドレス更新: updateEmail()
  2. パスワードリセットメール発行: sendPasswordResetEmail()
  3. パスワードリセットメールを開いて、新パスワードを設定

1.メールアドレス更新: updateEmail()の際、Firebase Authenticationページで確認した限りでは、メールアドレスは新メールアドレスに更新されておりましたが、下図のようにプロバイダー情報がGoogleのままでした。

image.png

そのため、パスワードリセットメールを発行して、メールのリンクより、パスワードを再設定してあげる必要がありました。
※これはすなわち、Googleサインイン用パスワードがそのまま受け継がれることはなかったということ。

パスワード再設定後は、メール/パスワードによるサインインに対応したアカウントに切り替わりました。

「認証プロバイダーによるサインインからのメールアドレス変更を禁止」してしまうのも手

現在製作中のアプリは、パスワードリセットメールを発行して対応しておりますが、この手続きはユーザーにとって望ましいものではないかもしれません。

そのため、「認証プロバイダーによるサインインからのメールアドレス変更を禁止」してしまうのも手かもしれません。

さいごに

セキュリティ面に関わる重要度の高い部分のため、理解の相違や改良点などありましたらご連絡下さいますと幸いです。

参考記事

[JS] Firebaseの覚書 ① メールアドレス認証

FirebaseのE-mail認証でアドレスが正しいことを確認する

【Flutter + Firebase】パスワードリセットメールを送信する

19
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?