Firebase - 检查使用 Google 帐户创建的用户是不是正在注册或登录?

Posted

技术标签:

【中文标题】Firebase - 检查使用 Google 帐户创建的用户是不是正在注册或登录?【英文标题】:Firebase - check if user created with Google Account is signing up or logging in?Firebase - 检查使用 Google 帐户创建的用户是否正在注册或登录? 【发布时间】:2021-10-23 13:00:14 【问题描述】:

我正在尝试创建一个 Web 应用程序,您可以在其中使用 google 帐户登录并注册一个帐户。我已经设法做到了,因此他们可以使用 signInWithPopup(provider) 登录,但不确定如何实现注册。有什么建议?或者知道我可以使用的 firebase 中的任何功能吗?

【问题讨论】:

【参考方案1】:

在使用 Google 登录或任何其他提供商时,loginsign up 没有任何单独的方法。如果存在具有该凭据的用户,则该用户将登录,否则将创建一个新用户帐户。然后,您可以使用从signInWithPopUp 方法收到的结果中的additionalUserInfo.isNewUser 属性来检查用户是否是新用户。

firebase.auth().signInWithPopup(provider).then(function (result) 
  const additionalUserInfo: isNewUser = result;

  console.log(isNewUser ? "This user just registered" : "Existing User")
)

对于新的Modular SDK (V9.0.0+),同样可以写成:

import  signInWithPopup, getAdditionalUserInfo  from "firebase/auth"

const result = await signInWithPopup(auth, googleProvider);

// Pass the UserCredential   
const  isNewUser  = getAdditionalUserInfo(result)    

【讨论】:

非常有帮助,谢谢!!您知道您是否可以使用附加用户信息访问 google 帐户的生日? @gitmcgee 您必须添加 https://www.googleapis.com/auth/user.birthday.read 范围以及提供程序,然后使用 accessToken 向 People API 发出请求。您可以查看this answer 了解详细的 API 使用情况。【参考方案2】:

到目前为止,据我了解,您有两种登录网站的选择:一种是在您的网站上创建一个本地用户名/密码帐户,另一种选择是使用您的 google 帐户。我想最好的方法是检查 Google 帐户是否使用additionalUserInfo.isNewUser 链接到任何现有用户,然后按照这篇文章将您的 Google 帐户与通过您的网站在本地创建的帐户链接起来:https://firebase.google.com/docs/auth/web/account-linking?hl=lt

【讨论】:

【参考方案3】:

一旦您的应用程序中有 Firebase 依赖项。您可以使用 createUserWithEmailAndPassword 方法来做到这一点。

firebase
.auth()
.createUserWithEmailAndPassword("email@domain.com", "123123")
.then(data => 
    data.user.updateProfile(
        displayName: this.form.name
    ).then(() => );
)
.catch(err => 
    this.error = err.message;
);

【讨论】:

以上是关于Firebase - 检查使用 Google 帐户创建的用户是不是正在注册或登录?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 使用 Google 帐户覆盖登录

在 Android 中使用 Google/Facebook 时的 Firebase Auth 重复帐户

使用Firebase Google用户身份验证更改用户

如何将 Firebase 帐户关联到 Google Play 游戏帐户

有没有办法确定用户是通过自定义 Firebase 帐户还是通过 Flutter 中的 Google 帐户登录的?

如何通过用于下载应用程序的 Google Play 商店帐户获取 Firebase 用户?