前回の続きです。
公式ドキュメントにある通りですが、ユーザーの削除・メールアドレスの変更・パスワードの変更などと言った、セキュリティ上の重要な操作を行う場合は最近ログインしている必要があります。
ログインからしばらく時間が経っていると requiresRecentLogin エラーが発生する場合があります。
そのため、そのような操作を行う前に、ユーザーの再認証を行うことをお勧めします。
今回は、そのユーザーの再認証のプログラムについて紹介します。
他の Firebase Authentication についての記事一覧は以下の通りです。
- ①基本設定編
- ②メールアドレス・パスワード認証によるユーザー登録編
- ③メールアドレス・パスワード認証によるログイン・ログアウト編
- ④メールアドレスとパスワードの更新編
- ⑤メールアドレスの確認メール送信・パスワード再設定メール送信編
- ⑥ユーザーの再認証編(本記事)
- ⑦Googleアカウントログイン編
- ⑧Apple アカウントログイン編
- ⑨ユーザープロフィール更新編
- ⑩匿名ログイン編
Firebase Authentication の iOS 導入手順【⑥ユーザーの再認証編】【SwiftUI】
ユーザーを再認証する reauthenticate メソッド
user?.reauthenticate(with: credential) { error in }
ログイン中のユーザー(currentUser)に対して再認証を掛けます。
引数の credential は以下のように生成します(credential とは保証書・証明書などと言った意味です)。
let credential = EmailAuthProvider.credential(withEmail: email, password: password)
password には変更前のパスワードを渡します。
パスワード変更時の実装例
今回はパスワードの変更をする際の流れを例に取ります。
if let user = Auth.auth().currentUser {
let credential = EmailAuthProvider.credential(withEmail: user.email ?? "", password: self.oldPassword)
user.reauthenticate(with: credential, completion: { authResult, error in
if error == nil {
user.updatePassword(to: self.password) { error in
}
}
})
}
パスワード変更時は現在のパスワードも入力してもらうはずなので、それを渡すようにします。
reauthenticate の結果エラーがなければ updatePassword を実行するようにしましょう。
メールアドレスの変更やユーザー削除なども、同じ要領で行えるはずです。
以上