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

Noo*_*les 10 authentication dart firebase flutter

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

我使用firebase_authflutter_facebook_login

Aka*_*ony 17

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

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);
}}
Run Code Online (Sandbox Code Playgroud)

编辑:由于该问题是针对 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
  }

}
Run Code Online (Sandbox Code Playgroud)