首页 文章

Angular app使用firebase身份验证刷新页面时重新进行身份验证

提问于
浏览
0

我正在使用Firebase SDK,Angular Cli 1.5.5 .

我使用firebase身份验证在Angular上构建了一个应用程序 . 成功创建用户并使用电子邮件和密码登录 . 但每次刷新页面,我都需要再次登录 . 我如何使用firebase本地存储对象重新进行身份验证并将登录状态传递给CanActivate auth-guard?

auth-guard.servie 文件

import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { AuthServiceService } from './auth.service';

@Injectable()
export class AuthGuardService implements CanActivate {

  constructor(private auth: AuthServiceService, private router: Router) { }
  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    if (this.auth.isAuthenticated()) {
      console.log(true);
      return true;
    } else {
      this.router.navigate(['/login']);
      console.log(false);
      return false;
    }
  }
}

AuthService

import { Injectable, OnInit } from '@angular/core';
import * as firebase from 'firebase';
import { Router } from '@angular/router';

@Injectable()
export class AuthServiceService implements OnInit{

  constructor(private router: Router) {}

  ngOnInit() {
  }

  signUpUser(email: string, password: string) {
    return firebase.auth().createUserWithEmailAndPassword(email, password);
  }

  signInUser(email: string, password: string) {
    return firebase.auth().signInWithEmailAndPassword(email, password);
  }

  isAuthenticated() {
    return firebase.auth().currentUser;
  }

  logout() {
   return firebase.auth().signOut();
  }
}

1 回答

  • 0

    守卫可以返回一个Observable:

    import { AngularFireAuth } from 'angularfire2/auth';
    
    constructor(private firebaseAuth: AngularFireAuth) {}
    
    canActivate(): Observable<boolean> {
        return this.firebaseAuth.authState.pipe(map(user => user !== null));
    }
    

相关问题