私はSwiftで書かれたiOSアプリを持っています。ユーザーは、新しいFirebase 3.2.1バージョンで電子メールとパスワードを使用してサインインするか、FacebookやGoogleでサインインすることができます。しかし、私はユーザーのパスワードをリセットする際に問題に遭遇しました。 Firebaseは、以下に示すように私が使用しているsendPasswordResetWithEmail関数を提供して、ユーザーがパスワードをリセットできるリンクを持つ電子メールを送信します。GoogleまたはFacebookにサインインしたアカウントのFirebaseパスワードリセットを電子メールで処理する方法
このsendPasswordResetWithEmail関数は、電子メールで提供されたリンクがGoogleまたはFacebookのパスワードをリセットしないため、ユーザーがGoogleまたはFacebookからのログインに使用した電子メールを入力するとエラーになるはずです。しかし、そうではありません。
GoogleまたはFacebookからサインインしたアカウントの電子メールを送信すると、Firebaseの代わりにプロバイダとしてGoogleに表示されますが、Firebaseの[認証]タブにある電子メールのリストに存在するため。したがって、ErrorCodeUserNotFoundエラーまたはその他のエラーは発生しません。代わりに、Firebaseは依然としてリセットされたパスワード電子メールを提供された電子メールに送信しているので、パスワードをリセットして私に成功メッセージを送ることができます。しかし、私のアプリで提供されているFacebookやGoogleのサインインボタンを使用しない限り、同じアカウントでログオンすることはできません。この場合、パスワードは古いパスワードのままです。
このシナリオをどのように処理すればよいですか?
これは私がfirebase.google.comサイトに記載されているように使用していますコードです:
FIRAuth.auth()?.sendPasswordResetWithEmail(email!) { error in
if error != nil {
// Display error message
if let errorCode = FIRAuthErrorCode(rawValue: error!.code) {
switch (errorCode) {
case .ErrorCodeUserNotFound:
self.displayAlertMessage(INVALID_EMAIL_3RDPARTY_ERROR_TITLE, message:"No account exists with this email address. Please try another email address.");
return
default:
self.displayAlertMessage(ACCOUNT_CREATION_DB_ERROR_TITLE, message: ACCOUNT_CREATION_DB_ERROR_MESSAGE);
return
}
}
} else {
// Password reset email sent.
}}
注:私は、その後Firebaseデータベースの認証]タブに表示されていない電子メールアドレスを使用している場合ErrorCodeUserNotFoundエラーがスローされます。
ありがとうDan!私はリアルタイムデータベースにそれを保存することなく、ユーザー認証からプロバイダを取得する方法があるかどうかを調べようとしていましたが、あなたもそれに問題があるようです。 – Jace
問題ありません! UIDでユーザーをデータベースに追加する方法を理解できましたか? –
はい、私はこれのようにしています:REF.child(uid).updateChildValues(user)私のユーザーはfunc getUserDictionary(user:User) - > Dictionary { let userDictionary:[String : "プロバイダ":user.provider as String !, "email":user.email as String !, "firstName":user.firstName as String !, "lastName":user.lastName as文字列! ] return userDictionary } –
Jace