在 Flutter 上使用电子邮件和密码进行 Firebase 身份验证的示例?

Posted

技术标签:

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

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

非常感谢!

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于在 Flutter 上使用电子邮件和密码进行 Firebase 身份验证的示例?的主要内容,如果未能解决你的问题,请参考以下文章

在电子邮件密码身份验证中进行额外的自定义检查 (Flutter - Firebase)

使用电子邮件和密码创建帐户时 Flutter + Firebase updateDisplayName

尝试使用电子邮件和密码创建帐户时,Flutter 应用程序崩溃

使用 Flutter firebase 自定义用户名和密码登录

Flutter 在尝试 Firebase 身份验证时无法捕获 PlatformException

使用电子邮件、密码、显示名称和 photoURL 创建用户