【问题标题】:Example of Firebase Auth with Email and Password on Flutter?在 Flutter 上使用电子邮件和密码进行 Firebase 身份验证的示例?
【发布时间】:2018-11-25 15:31:30
【问题描述】:

第一次实现 Firebase 身份验证,这也是 Flutter 开发人员的新手,我希望使用电子邮件和密码,而不是 Google 登录。我看到的唯一使用 Firebase 身份验证的例子是匿名的或与 Google 一起使用的。是否有资源/教程显示如何使用 signInWithEmailAndPassword 方法正确设置调用?

非常感谢!

【问题讨论】:

    标签: firebase firebase-authentication flutter


    【解决方案1】:

    这是我服务的一个例子。我要求提供电子邮件、姓名和密码字段。

     registerWithEmail(String name, String email, String password) async {
    

    首先我检查电子邮件是否已经在 facebook 或其他地方注册。

        List<String> providers = await firebaseAuth.fetchProvidersForEmail(email: email); 
    

    这不是理想的解决方案,但如果用户已经注册,您想要处理,而不是将电子邮件与当前用户链接

        if (providers != null && providers.length > 0) {
          print("already has providers: ${providers.toString()}");
          return handleProviders(providers); 
        }
    

    创建新用户

        FirebaseUser newUser = await firebaseAuth.createUserWithEmailAndPassword(email: email, password: password);
        await newUser.sendEmailVerification();
    

    基本上就是这样。我更新了用户的名称,因为我有它。

        var userUpdateInfo = new UserUpdateInfo();
        userUpdateInfo.displayName = name;
        await firebaseAuth.updateProfile(userUpdateInfo);
        await newUser.reload();
    

    稍后您可以将用户保存在您的 Firestore 中,其中用户 uid 是文档 ID。这样我以后可以得到它。

    【讨论】:

      【解决方案2】:

      在我的应用程序中,我有一个 auth 类,因为我不喜欢在我的小部件类中乱扔非小部件代码,但如果你愿意,可以将此代码放入小部件类中。

      在 auth.dart 我有:

      import 'package:firebase_auth/firebase_auth.dart';
      
      class Auth {
        final FirebaseAuth auth = FirebaseAuth.instance;
      
        Future<User> handleSignInEmail(String email, String password) async {
          UserCredential result =
              await auth.signInWithEmailAndPassword(email: email, password: password);
          final User user = result.user!;
      
          return user;
        }
      
        Future<User> handleSignUp(email, password) async {
          UserCredential result = await auth.createUserWithEmailAndPassword(
              email: email, password: password);
          final User user = result.user!;
      
          return user;
        }
      }
      

      然后在我的登录/注册屏幕中创建我的身份验证类的实例:

      var authHandler = new Auth();
      

      最后,在我的登录按钮 onPressed 回调中:

      onPressed: () {
          authHandler.handleSignInEmail(emailController.text, passwordController.text)
          .then((FirebaseUser user) {
               Navigator.push(context, new MaterialPageRoute(builder: (context) => new HomePage()));
         }).catchError((e) => print(e));
      } 
      

      【讨论】:

      • 我收到一条错误消息,指出Undefined class 'Auth'.
      • 'AuthResult' 不能分配给类型 'FirebaseUser'
      • 您需要将第一个代码块包装在一个名为 Auth 的类中,这样您就不会收到 cmets 中提到的错误,如下所示:class Auth { final FirebaseAuth auth = FirebaseAuth.instance; ... }。另外,不要忘记在 auth.dart 文件的顶部或放置类的任何位置导入“package:firebase_auth/firebase_auth.dart”。
      • 当您使用电子邮件和密码注册时。用户是否也自动登录?
      【解决方案3】:

      带有完整解释示例的 Git 存储库,用于 使用颤振在 Firebase 中登录电子邮件/密码

      这可能会对你有所帮助。

      Git 仓库:https://github.com/myvsparth/firebase_email_signin

      全文一步一步:https://www.c-sharpcorner.com/article/how-to-do-simple-login-with-email-id-in-flutter-using-google-firebase/

      【讨论】:

      • 嗨,Parth,感谢您的帖子,但 c-sharpcorner.com 网站毫无用处。我试图下载您在您的帖子页面上添加的代码。它将我重定向到签名/登录页面。我创建了新帐户并收到了帐户激活电子邮件,但是当我单击注册/激活电子邮件中可用的“激活帐户”按钮时,它从未起作用,我无法下载您的源代码,这就是我需要在 Google 上重新搜索此主题的原因。感谢您,但对 c-sharpcorner.com 网站感到非常失望。
      【解决方案4】:

      此代码用于注册新用户

        fb_auth.UserCredential userCredential = await fb_auth
            .FirebaseAuth.instance
            .createUserWithEmailAndPassword(email: email, password: password);
      

      这是用于登录以前的用户

      fb_auth.UserCredential userCredential = await fb_auth
            .FirebaseAuth.instance
            .signInWithEmailAndPassword(email: email, password: password)
      

      那个 fb_auth 是

      import 'package:firebase_auth/firebase_auth.dart' as fb_auth;
      

      【讨论】:

        猜你喜欢
        • 2019-06-11
        • 2019-03-15
        • 1970-01-01
        • 2018-09-03
        • 1970-01-01
        • 2018-09-22
        • 2014-01-17
        • 2021-09-09
        • 1970-01-01
        相关资源
        最近更新 更多