首页 文章

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

提问于
浏览
5

我正在使用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();
  }
}

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

  • 不允许用户选择其他Google帐户登录 .

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

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

2 回答

  • 0

    这是预期的,因为它们是2个独立的系统,每个Auth状态是分开存储的 . Firebase Auth signOut 退出Firebase . 要从Google退出,您必须转到Google并退出 . 如果这对您的应用至关重要,您可以随时在Firebase Auth注销,重定向到Google注销页面:

    auth.signOut().then(() => {
      window.location.assign('https://accounts.google.com/Logout');
    }, (error) => {
      console.log(error);
    });
    
  • 2

    作为一个建议,你可以通过link追踪"solution"来更谨慎地做到这一点 . 我在我的应用程序中使用它,以防用户无权访问数据库,但您可以在任何地方添加iframe .

    注销服务:

    function LogoutService($location){
            this.logOut = function(myAuth){
                myAuth.$signOut().then(() => {
    
                    $location.path("/logout");
    
                }, (error) => {
                    console.log(error);
                });
            };
        };
    

    路由器:

    .when('/logout', {
                templateUrl : "login/logout.html"
            })
    

    logout.html:

    <div class="container" >
    
    <p >{{logUser.unauthUser}} unauthorized. Try again.</p>
    
    <iframe id="logoutframe" src="https://accounts.google.com/logout" style="display: none"></iframe>
    
    </div>
    

相关问题