Firebase身份验证问题:我可以通过以下方式管理Firebase身份验证:一旦用户注册,它便会忽略状态更改?

时间:2020-07-13 08:31:55

标签: firebase flutter

我正在使用Firebase的身份验证系统进行登录和注册,并将Cloud Firestore作为数据库。

这是FirebaseUser的流,我用来检测哪个用户已登录(因此,每次我重新打开应用程序时,我都不需要一次又一次登录)并检测auth更改,以防用户注销:

Stream<FirebaseUser> get user{
    return _auth.onAuthStateChanged;
  }

我已将此流添加到小部件树的顶部:

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    

    return StreamProvider<FirebaseUser>.value(
      value: FirebaseAPI().user,
      child: ChangeNotifierProvider<SavedUser>(
        create: (_) => SavedUser(),
        child: MaterialApp(
          home: Wrapper(),
        ),
      ),
    );
  }
}

[FirebaseAPI()是包含所有FirebaseAuth函数(包括“ FirebaseUser”流)的类。]

现在我面临的问题是,一旦我注册了一个用户,然后重新启动我的应用程序……那个注册的用户会自动登录。但是我不想那样做。

实际上我的应用程序正在像这样工作:

  1. 用户注册。 (他的注册数据进入数据库的“待处理”集合中。)
Future<dynamic> sendUserRegistrationtoPending(String name,String email,String password,String branch)
  {
      return databaseReference.collection('Pending').document(name).setData(<String,dynamic>{
        'Email' : email,
        'Password' : password,
        'Branch' : branch,
        'Status' : 'user',
      }).then((value){return "Success";});
  }

[[将该用户发送到“待处理”状态时,与FirebaseAuth没有交互作用]

  1. 然后,管理员将获得注册用户的通知卡。接受注册后,该用户将从“待处理”集合移到“用户”集合,因此该用户将是有效用户,并且能够登录。
  Future<dynamic> registerUserFromPending(String name,String email,String password,String branch,String phone) async
  {
     AuthResult result = await _auth.createUserWithEmailAndPassword(email: email, password: password);

     if(result == null)
       print("Error is Firebase Auth while registering");
     else{
       databaseReference.collection('Pending').document(name).delete();
       return databaseReference.collection('User').document(result.user.uid).setData(<String,dynamic>{
         "Name" : name,
         "Email" : email,
         "Password" : password,
         "Branch" : branch,
         'Phone' : phone,
         "Status" : 'user',
       }).then((value){
        return "Success";
       }).catchError((a){
         return a;
       });
     }
  }

在这里,我正在使用FirebaseAuth函数将用户注册到Firebase并向用户提供UID,以便一旦用户登录,Firebase就会识别出它。

我的意思是.......说我是管理员,我接受了用户的注册。然后,我不想在重新打开应用程序后以该用户ID登录。

希望您能理解我的问题。

非常感谢您的回答。 :)

更新:

当前,我作为临时修复程序是这样的:

Future<dynamic> registerUserFromPending(String adminEmail,String adminPassword,String name,String email,String password,String branch,String phone) async
  {
    String uid;
     _auth.createUserWithEmailAndPassword(email: email, password: password).then((newUid){
       if(newUid == null)
         print("Error in Auth");
       else{
         uid = newUid.user.uid;
         FirebaseAPI().loginWithEmailAndPassword(adminEmail, adminPassword).then((value){

           print("Me : \n" + "Email ID : " + value.email);
           databaseReference.collection('Pending').document(name).delete();
           return databaseReference.collection('User').document(uid).setData(<String,dynamic>{
             "Name" : name,
             "Email" : email,
             "Password" : password,
             "Branch" : branch,
             'Phone' : phone,
             "Status" : 'user',
           }).then((value){
             return "Success";
           }).catchError((a){
             return a;
           });
         });
       }
     });
  }

在这里,我在接受新用户的注册后重新登录管理员.......但是我不认为这是最好的方法。如果有的话,请提出一个更好的方法。

0 个答案:

没有答案