在 Flutter 中使用 Firebase 身份验证检查用户是不是是新用户

Posted

技术标签:

【中文标题】在 Flutter 中使用 Firebase 身份验证检查用户是不是是新用户【英文标题】:Check if user is new using Firebase Authentication in Flutter在 Flutter 中使用 Firebase 身份验证检查用户是否是新用户 【发布时间】:2019-01-20 00:37:13 【问题描述】:

根据this page 的底部,AdditionalUserInfo 提供了一个名为isNewUser() 的方法来检查例如社交登录(Facebook、Google 等)是登录还是注册。 this answer. 中给出了一个示例 Flutter 的问题是我找不到任何名为 AdditionalUserInfo 的类或名为 getAdditionalUserInfo() 的函数。那么有谁知道如何检查用户是否是第一次注册,最好是使用 Facebook 和 Firebase 身份验证。

我正在使用firebase_auth 和flutter_facebook_login。

【问题讨论】:

【参考方案1】:

AdditionalUserInfo 是AuthResult 类的方法。如果要检查用户是否是第一次登录,则可以使用additionalUserInfo.isNewUser 的值。以下代码使用 Google Auth 登录用户。

Future<FirebaseUser> _signIn() async 
 try 
  GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
  GoogleSignInAuthentication gSA = await googleSignInAccount.authentication;
  final AuthCredential credential = GoogleAuthProvider.getCredential(
    accessToken: gSA.accessToken,
    idToken: gSA.idToken,
  );
  AuthResult authResult = await _auth.signInWithCredential(credential);
  if (authResult.additionalUserInfo.isNewUser) 
    //User logging in for the first time
    // Redirect user to tutorial 
  
  else 
    //User has already logged in before.
    //Show user profile
  
 catch (e) 
  print(e.message);

编辑:由于该问题是针对 Facebook 登录的,因此我也添加了该代码。下面的代码使用了flutter_facebook_loginfirebase_auth 包。

Future<FirebaseUser> _facebookAuthHandler() async 
  final result = await facebookLogin.logInWithReadPermissions(['email']);
  final AuthCredential credential = FacebookAuthProvider.getCredential(accessToken: result.accessToken.token);
  AuthResult authResult = await _auth.signInWithCredential(credential);
  if (authResult.additionalUserInfo.isNewUser) 
    //TODO User logging in for the first time. Redirect to Pages.SignUp Page
  
  else 
    //TODO User has already logged in before. Redirect to Home Page
  


【讨论】:

如果使用 SignInScreen ,如何获取 AuthResult ,***.com/questions/59523235【参考方案2】:

在最近的版本中,没有 authResult 类,而是有 userCredential 类。这将为您提供有关用户的其他信息,因此您将知道该用户是否已知。

Future<void> signInWithGoogle() async 
GoogleSignInAccount account = await googleSignIn.signIn();
GoogleSignInAuthentication authentication = await account.authentication;
OAuthCredential credential = GoogleAuthProvider.credential(
  accessToken: authentication.accessToken,
  idToken: authentication.idToken,
);
UserCredential userCredential =
    await _firebaseAuth.signInWithCredential(credential);
User user = userCredential.user;
if (userCredential.additionalUserInfo.isNewUser) 
  //Here, you can do something with the profile of a new user. eg. upload information  
  //in database

【讨论】:

【参考方案3】:

或者只是做这样的事情:

final userCredential = await _firebaseAuth.signInWithPopup(provider);
final username = userCredential.additionalUserInfo?.username;

【讨论】:

以上是关于在 Flutter 中使用 Firebase 身份验证检查用户是不是是新用户的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 中使用 Firebase 身份验证检查用户是不是是新用户

在 Flutter 中使用 Firebase 电话身份验证超时后使 OTP 无效

在 Flutter 中使用 StreamProvider 4.0.1 从 Firebase 监控身份验证状态

使用提供程序在 Flutter 中进行 Firebase 电话身份验证 [关闭]

Flutter:Firebase 身份验证和 Firestore 快照流

在 Flutter 的下拉列表中从 Firebase 获取经过身份验证的用户列表