如何在angularfire2/auth signOut之后断开与Google身份验证的连接?

sza*_*ske 6 firebase angularfire firebase-authentication angularfire2 angular

我正在使用Angular和Firebase构建一个网站.我正在使用Angularfire2和AngularFireAuth库以及GoogleAuthProvider(Google)作为我的身份验证提供程序.

这是我的服务代码:

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

@Injectable()
export class AuthenticationService {
  user: Observable<firebase.User>;

  constructor(public afAuth: AngularFireAuth) {
    this.user = afAuth.authState;
  }

  login() {
    this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider());
  }

  logout() {
    this.afAuth.auth.signOut();
  }
}
Run Code Online (Sandbox Code Playgroud)

当用户"退出"我的网站时,它可以正常工作,但似乎可以"缓存"Google身份验证.因此,当他们第二次尝试登录时,我遇到了一些问题:

  1. 用户不得选择其他Google帐户登录.
  2. 用户自动登录...这似乎是一个安全问题.另一个用户可以访问相同的共享PC,并以前一个用户身份登录,并且不需要输入密码来执行此操作.

我究竟做错了什么?有没有办法可以阻止angularfire2/auth缓存这些凭据?有没有办法在用户退出我的网站时将用户退出Google?

boj*_*eil 3

这是预期的,因为它们是 2 个独立的系统,并且每个身份验证状态都是单独存储的。Firebase AuthsignOut会将您从 Firebase 中注销。要从 Google 注销,您必须访问 google 并注销。如果这对您的应用至关重要,您可以随时在 Firebase Auth 上注销,重定向到 google 注销页面:

auth.signOut().then(() => {
  window.location.assign('https://accounts.google.com/Logout');
}, (error) => {
  console.log(error);
});
Run Code Online (Sandbox Code Playgroud)

  • 我感谢您的回复,并同意这是“按设计”的,但我仍然认为这是一种不幸的用户体验。我希望有一个选项可以让我使用 Google 凭据登录,但同时不要让我登录 Google。 (3认同)