繁体   English   中英

身份验证错误捕获中缺少 firebase 凭据

[英]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 (视情况而定)

注意:需要注意的是, emailphoneNumber等属性当前嵌套在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM