Постоянство аутентификации Firebase Angular 7 - PullRequest
0 голосов
/ 10 февраля 2019

Я новичок в 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»"Я попадаю в цикл регистрации, где меня перенаправляют на страницу входа в систему, которая обнаруживает, что я не вошел в систему, затем пытаюсь войти в систему, перенаправляет меня на страницу входа в систему, которая обнаруживает, что я не вошел в систему, и так далее.

Я думаю, что все эти проблемы на самом деле связаны с одной и той же проблемой: моя реализация сохранения состояния аутентификации несколько ошибочна.

Итак, мой вопрос действительно прост: что я делаю неправильно?:)

Я бы хотел иметь возможность войти в систему, а затем оставаться в системе при обновлении.

Спасибо за помощь.:)

...