在 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 自定义用户名和密码登录