Я новичок в Firebase, и я пытаюсь реализовать аутентификацию из приложения Angular 7.
Вот мой сервис аутентификации:
@Injectable({
providedIn: 'root'
})
export class AuthService {
private user: Observable<firebase.User>;
private userDetails: firebase.User;
constructor(private angularFireAuth: AngularFireAuth) {
this.user = this.angularFireAuth.user;
this.user.subscribe(
(user) => {
if (user) {
this.userDetails = user;
}
else {
this.userDetails = null;
}
}
);
}
signInGoogleLogin() {
return this.angularFireAuth.auth.setPersistence(firebase.auth.Auth.Persistence.LOCAL)
.then(() =>
this.angularFireAuth.auth.signInWithPopup(
new firebase.auth.GoogleAuthProvider()
)
);
}
isLoggedIn(): boolean {
return this.userDetails != null;
}
}
А вот мой AuthGuardреализация:
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private router: Router, private authService: AuthService) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):
Observable<boolean> | Promise<boolean> | boolean {
if (this.authService.isLoggedIn()) {
return true;
}
this.router.navigate(['login'], { queryParams: { returnUrl: state.url}});
return false;
}
}
Моя проблема: постоянство не работает.Всякий раз, когда я обновляю страницу, я должен войти в систему, всякий раз, когда я перехожу к другому компоненту, который требует аутентификации, мне нужно войти снова.
Конечно, если я использую «signInWithRedirect» вместо «signInWithPopup»"Я попадаю в цикл регистрации, где меня перенаправляют на страницу входа в систему, которая обнаруживает, что я не вошел в систему, затем пытаюсь войти в систему, перенаправляет меня на страницу входа в систему, которая обнаруживает, что я не вошел в систему, и так далее.
Я думаю, что все эти проблемы на самом деле связаны с одной и той же проблемой: моя реализация сохранения состояния аутентификации несколько ошибочна.
Итак, мой вопрос действительно прост: что я делаю неправильно?:)
Я бы хотел иметь возможность войти в систему, а затем оставаться в системе при обновлении.
Спасибо за помощь.:)