Angular 2+ Firebase 身份验证 - 设置登录状态持久性

nic*_*ook 7 authentication firebase firebase-authentication angularfire2 angular

我已经使用 firebase 为身份验证服务中的 angular 应用程序设置了身份验证,并且我正在尝试确保成功登录后会话状态的持久性。

我已经看到默认情况下 firebase 应该具有状态持久性,但是应用程序中的当前登录仅持续到页面刷新,之后再次需要登录,这似乎不正确。

我知道我必须使用 statePersistence 方法,如文档中所示,但这并没有说明如何在 angular 2+ 应用程序中实际实现登录/身份验证服务。

如何在以下身份验证服务中实现会话 statePersistence?:

auth.service.ts

import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import * as firebase from 'firebase/app';
import { AngularFireAuth } from 'angularfire2/auth';

@Injectable()

export class AuthService {

  private user: Observable<firebase.User>;

  isAuthenticated: boolean = false;

  constructor(private firebaseAuth: AngularFireAuth, private router: Router) {
    this.user = firebaseAuth.authState;
  }

  signIn(email: string, password: string) {
    this.firebaseAuth
        .auth
        .signInWithEmailAndPassword(email, password)
        .then(value => {
            console.log('Signed In');
            this.isAuthenticated = true;
            this.router.navigateByUrl('/dashboard');
        })
        .catch(err => {
            console.log('Sign-In Error: ', err.message);
        });
  }

  signInGoogle() {
    return this.firebaseAuth.auth.signInWithPopup(
        new firebase.auth.GoogleAuthProvider()
    )
  }
Run Code Online (Sandbox Code Playgroud)

boj*_*eil 0

您可能没有使用onAuthStateChanged侦听器来检测页面加载时的初始身份验证状态。

firebase.auth().onAuthStateChanged(user => {
  if (user) {
    // User signed in.
  } else {
    // User not signed in.
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但这并没有真正回答我的问题。我不知道这应该放在我上面提供的代码中的哪里。 (2认同)