【问题标题】: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_authflutter_facebook_login

【问题讨论】:

    标签: firebase authentication dart flutter


    【解决方案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
      }
    
    }
    

    【讨论】:

    【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 2021-12-26
        • 2019-12-29
        • 2017-05-15
        • 2018-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        相关资源
        最近更新 更多