やりたいこと
Flutter×FirebaseAuthでログイン管理をしているアプリで、メール認証のパスワードリセットのメールを送ることができるようにしたいです。
簡単にできました
FirebaseAuthでのログインはできるようになっている前提で、
以下を記載して、引数の "email" に送信先を渡すだけで、簡単にメールを送ることができました。メール送信はFirebaseAuth側で行なってくれるため、この部分だけであれば、メール送信の仕組みを作る必要がなく、パスワードの変更画面も、FirebaseAuthのデフォルトのものがあるので、これだけでパスワードリセットの仕組みができるようです。こちらはユーザーのパスワードを知らなくても良いのもとてもうれしいです。
FirebaseAuth.instance.sendPasswordResetEmail(email: targetEmail);
メール文言を変更する
デフォルトのままですと、英語のデフォルトテンプレートで、メールが送信されてしまいます。
メールの内容をカスタマイズしたい場合は、Firebaseのプロジェクトで、
Authentication > Template > パスワードの再設定
から変更することができます。
エラー処理を行う
存在しないユーザーの場合などの、エラー処理を行います。
パスワードリセットメールのメソッド(sendPasswordResetEmail)で発生するエラーコードの一覧は、こちらにまとまっています。
私の場合は、以下のように、エラーコードによって、エラーメッセージをセットし、この後の部分でダイアログとして表示しています。
///パスワードリセットメール送信
try {
await FirebaseAuth.instance.sendPasswordResetEmail(email: targetEmail);
} on FirebaseAuthException catch (e) {
if (e.code == 'invalid-email') {
///無効なメールアドレス
errorMessage = ErrorMessageList.inValidEmail;
} else if (e.code == 'user-not-found') {
///ユーザーが存在しない
errorMessage = ErrorMessageList.userNotFound;
} else {
///その他の失敗
errorMessage = ErrorMessageList.sendPasswordResetMailFail;
}
} on Exception {
///その他の失敗
errorMessage = ErrorMessageList.sendPasswordResetMailFail;
}
参考にさせていただいたサイト