Я пытаюсь создать аутентификацию пользователя с помощью Firebase.
У меня есть две роли в моем приложении: ученик и учитель, которые я добавляю в коллекцию Firebase с именем users
при регистрации, где есть роль поля .
Моя проблема в том, что я хочу перенаправить ученика на страницу профиля ученика, а учителя - на страницу профиля учителя. У меня есть две разные формы, одна для входа ученика и одна для входа учителя.
Когда я ввожу данные учителя при входе в систему учащегося, я хочу получить ошибку, поскольку пользователя не существует.
Теперь я не получаю никаких ошибок, если бы у меня была только одна форма входа, все работало бы правильно, но у меня было две, поэтому я хочу, чтобы она выдала мне ошибки, если пользователь является учителем и входит в систему. для студентов.
Это мой логин для студентов в моем auth.service
loginEmailStudent(email: string, pass: string) {
return new Promise((resolve, reject) => {
this.auth.signInWithEmailAndPassword(email, pass)
.then( (user) => {
this.afs.collection("users").ref.where("email","==", user.user.email).onSnapshot(snap => {
snap.forEach(userRef => {
if(userRef.data().role == "student"){
this.router.navigate(['/student/profile']);
} else {
//error
}
})
})
}).catch(err => console.log(reject(err)));
});
}
То же самое для loginTeachers, кроме роли. И это в моем компоненте авторизации, где отправка формы для входа студентов.
onSubmit(form: NgForm) {
if(!form.valid) {
return
}
const email = form.value.email;
const password = form.value.password;
this.isLoading = true;
if(this.isLoginMode) {
this.authService.loginEmailStudent(email, password)
.then( (res) => {
this.isLoading = false;
}).catch(errorRes => {
console.log(errorRes);
switch(errorRes.code) {
case 'auth/user-not-found' :
this.error = 'There is no existing user with this email address!';
break;
case 'auth/wrong-password' :
this.error = 'The password is invalid!';
break;
case 'auth/invalid-email' :
this.error = 'The email address is badly formatted!';
break;
default:
this.error = 'An error occured!';
}
this.isLoading = false;
});
} else {
this.authService.registerStudent(email, password)
.then((res) => {
this.isLoading = false;
this.authService.isAuth().subscribe( student => {
if(student) {
student.updateProfile({
displayName: '',
photoURL: this.inputImageUser.nativeElement.value
}).then( () => {
this.onLoginStudentRedirect();
}).catch( (error) => console.log('error', error));
}
});
}).catch(errorRes => {
console.log(errorRes);
switch(errorRes.code) {
case 'auth/email-already-in-use' :
this.error = 'The email address is already in use by another account!';
break;
case 'auth/invalid-email' :
this.error = 'The email address is badly formatted!';
break;
default:
this.error = 'An error occured!';
}
this.isLoading = false;
});
}
form.reset();
}