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

jav*_*low 5 firebase firebase-authentication flutter

第一次实施Firebase Auth,也是Flutter dev的新手,我希望使用电子邮件和密码,而不是Google登录.我使用Firebase Auth的唯一示例是匿名或Google.是否有资源/教程显示如何使用signInWithEmailAndPassword方法正确设置调用?

非常感谢!

小智 23

在我的应用程序中,我有一个auth类,因为我不喜欢使用非小部件代码丢弃我的小部件类,但是如果你愿意,你可以将这些代码放在你的小部件类中.

在auth.dart中我有:

final FirebaseAuth auth = FirebaseAuth.instance;

Future<FirebaseUser> handleSignInEmail(String email, String password) async {

    AuthResult result = await auth.signInWithEmailAndPassword(email: email, password: password);
    final FirebaseUser user = result.user;

    assert(user != null);
    assert(await user.getIdToken() != null);

    final FirebaseUser currentUser = await auth.currentUser();
    assert(user.uid == currentUser.uid);

    print('signInEmail succeeded: $user');

    return user;

  }

Future<FirebaseUser> handleSignUp(email, password) async {

    AuthResult result = await auth.createUserWithEmailAndPassword(email: email, password: password);
    final FirebaseUser user = result.user;

    assert (user != null);
    assert (await user.getIdToken() != null);

    return user;

  } 
Run Code Online (Sandbox Code Playgroud)

然后在我的登录/注册屏幕中,我创建了一个我的auth类的实例:

var authHandler = new Auth();
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我收到一条错误消息,指出“未定义的类‘Auth’。” (3认同)

Tre*_*ree 7

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

 registerWithEmail(String name, String email, String password) async {
Run Code Online (Sandbox Code Playgroud)

首先,我检查电子邮件是否已经在 facebook 或其他东西上注册。

    List<String> providers = await firebaseAuth.fetchProvidersForEmail(email: email); 
Run Code Online (Sandbox Code Playgroud)

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

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

创建新用户

    FirebaseUser newUser = await firebaseAuth.createUserWithEmailAndPassword(email: email, password: password);
    await newUser.sendEmailVerification();
Run Code Online (Sandbox Code Playgroud)

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

    var userUpdateInfo = new UserUpdateInfo();
    userUpdateInfo.displayName = name;
    await firebaseAuth.updateProfile(userUpdateInfo);
    await newUser.reload();
Run Code Online (Sandbox Code Playgroud)

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