我正在使用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”流)的类。]
现在我面临的问题是,一旦我注册了一个用户,然后重新启动我的应用程序……那个注册的用户会自动登录。但是我不想那样做。
实际上我的应用程序正在像这样工作:
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没有交互作用]
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;
});
});
}
});
}
在这里,我在接受新用户的注册后重新登录管理员.......但是我不认为这是最好的方法。如果有的话,请提出一个更好的方法。