[英]firebase credential missing in auth error catch
使用 firebase auth 登录,我想链接具有相同电子邮件地址的帐户。 我的意思是,当您使用电子邮件地址为 foo@gmail.com 的 facebook 帐户登录,并且此电子邮件已在您的应用程序中使用 google 帐户注册时,我想链接这些 facebook 和 google 帐户。
为此,我以文档为基础: https : //cloud.google.com/identity-platform/docs/link-accounts#handling_the_account-exists-with-different-credential_error
我正在使用 firebase v9(测试版),并且我的错误没有获得凭证属性。
getRedirectResult(auth).then((userCredential: UserCredential | null) => {
// do stuff
}).catch(error => {
console.log(error.credential) //undefined
})
其余的错误对象虽然(电子邮件,代码等)被填充
这是 v9 的重大更改,还是我遗漏了什么?
编辑,这是错误的样子
{
"code": "auth/email-already-in-use",
"customData": {
"appName": "[DEFAULT]",
"email": "hidden@gmail.com",
"_tokenResponse": {
"federatedId": "http://facebook.com/2105242186275845",
"providerId": "facebook.com",
"email": "hidden@gmail.com",
"emailVerified": false,
"firstName": "hidden",
"fullName": "hidden",
"lastName": "hidden",
"photoUrl": "https://graph.facebook.com/hidden/picture",
"displayName": "hidden",
"context": "",
"oauthAccessToken": "hidden",
"oauthExpireIn": 5100325,
"rawUserInfo": "{\"name\":\"hidden\",\"last_name\":\"hidden\",\"granted_scopes\":[\"email\",\"public_profile\"],\"id\":\"2105242186275845\",\"first_name\":\"hidden\",\"email\":\"hidden@gmail.com\",\"picture\":{\"data\":{\"is_silhouette\":false,\"width\":100,\"url\":\"https://platform-lookaside.fbsbx.com/platform/profilepic/?asid\\hidden\\u0026height\\u003d100\\u0026width\\u003d100\\u0026ext\\u003d1629017191\\u0026hash\\u003dAeTs_VEMazok9d75eG4\",\"height\":100}}}",
"errorMessage": "EMAIL_EXISTS",
"kind": "identitytoolkit#VerifyAssertionResponse"
}
},
"name": "FirebaseError"
}
您已正确识别这将是 v9 中的重大更改。
在 v9 中, AuthError
对象将如下所示:
财产 | 类型 | 描述 |
---|---|---|
appName |
string |
触发此错误的 Firebase 应用的名称。 |
email |
string | undefined |
用户帐户的电子邮件,用于登录/链接 |
phoneNumber |
string | undefined |
用户帐号的电话号码,用于登录/链接 |
tenantId |
string | undefined |
用于登录/链接的租户 ID |
code |
string |
标识此错误的 Firebase 错误代码 |
message |
string |
来自prodErrorMap (简单消息)或debugErrorMap (详细消息)的此错误代码的友好错误消息的debugErrorMap (视情况而定) |
注意:需要注意的是, email
和phoneNumber
等属性当前嵌套在customData
属性下,是否可以使用访问器将它们提升到顶层,或者您是否需要使用error.customData.email
等等。
重要的是,您可以看到省略了v8 的credential
属性。 在 v9 中,此属性不会自动解析,您应该像这样将其传递给OAuthProvider.credentialFromError()
:
getRedirectResult(auth)
.then((userCredential: UserCredential | null) => {
// do stuff
})
.catch(error => {
const credential = OAuthProvider.credentialFromError(error);
console.error("Auth failed with error: ", {
code: error.code,
email: error.email,
credential
});
})
这方面的文档尚未更新,正在作为firebase-js-sdk
问题 5057进行跟踪。
注意: Facebook 用户不必与您共享他们的电子邮件,因此预计它有时不可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.