我有一个在firestore数据库的帮助下进行登录的应用程序,并且我想进行自动登录,因此我在数据库中进行了布尔设置并将其设置为false,并在登录时将登录功能设置为true。 ,因此我想在应用运行时检查此人是否已经登录,是否有任何想法:)? 这是我的代码:
void getUserData() async {
try {
var firebaseUser = await FirebaseAuth.instance.currentUser();
firestoreInstance
.collection("Students")
.document(usernameController.text)
.get()
.then((value) {
setState(() {
email = (value.data)['email'];
password = (value.data)['password'];
gender = (value.data)['gender'];
loggedin = (value.data)['token'];
});
});
} catch (e) {
print(e.toString);
}
}
答案 0 :(得分:2)
您不必使用布尔值来检查用户是否已登录。 Firebase身份验证已提供了这一功能。您可以在initState
内部进行检查:
@override
void initState() {
super.initState();
FirebaseAuth.instance.currentUser().then((res) {
print(res);
if (res != null) {
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => Home(uid: res.uid)),
);
}
else
{
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SignUp()),
);
}
});
}
检查是否有当前用户,并导航到所需页面。
如果您具有不同类型的用户,则必须在数据库中标识它们。因此,请在Firebase身份验证中进行身份验证,并在数据库中使用userType
字段:
void registerToFb() {
firebaseAuth
.createUserWithEmailAndPassword(
email: emailController.text, password: passwordController.text)
.then((result) {
firestoreInstance.collection("users").document(result.user.uid).setData({
"email": emailController.text,
"name": nameController.text,
"userType" : "Students"
}).then((res) {
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => Home(uid: result.user.uid)),
);
});
}).catchError((err) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text("Error"),
content: Text(err.message),
actions: [
FlatButton(
child: Text("Ok"),
onPressed: () {
Navigator.of(context).pop();
},
)
],
);
});
});
}