Я пытался сделать экран входа в систему, который; если пользователь входит в систему со своим адресом электронной почты и паролем, они будут отображать go на экранах пользователей; однако, если администратор войдет в систему со своим адресом электронной почты и паролем администратора, приложение отправит администратора на страницу администратора. Я создал метод, который, если у пользователя нет коллекции в firestore, приложение предоставит форму для записи их информации; если у них есть коллекция в firestore, они go на экране пользователя. Код выглядит следующим образом:
Объект для аутентификации
'final FirebaseAuth _auth = FirebaseAuth.instance;'
Вход с помощью электронной почты и пароля
//sign-in with e-mail and password
Future signInEmail (String email, String password) async{
try{
AuthResult result = await _auth
.signInWithEmailAndPassword(email: email, password: password);
FirebaseUser user = result.user;
return _userFromFirebaseUser(user);
} catch(e){
print(e.toString());
return null;
}
}
Войти с помощью электронной почты и пароля на странице входа
//... log-in page UI and form for taking e-mail and password from users
//...
//log-in via e-mail
void signIn() async {
if (_formKey.currentState.validate()) {
var firebaseUser = await FirebaseAuth.instance.currentUser();
dynamic result = await _auth.signInEmail(email, password);
if (result == null) { // if email is false
setState(() {
loading = false;
error = "Wrong email";
});
} else if(firebaseUser.uid == "aMDsuSJ9h6eIJuWX0SvwmXJTvTJ3"){ // tried to find admin with its uid
Navigator.push(context, MaterialPageRoute(builder: (context) => AdminHome()));
} else { // sends to account page
var firebaseUser = await FirebaseAuth.instance.currentUser();
final snapShot = await Firestore.instance.collection("membership")
.document(firebaseUser.uid)
.get();
if(snapShot.exists){ // if user has a collection, go to user screens
Navigator.push(context, MaterialPageRoute(builder: (context) => AccountHome()));
} else{ // if user doesn't have any collection, pop-up a dialog
userInfoDialog(context);
}
}
}
}