4

我正在使用Angular和Firebase构建网站。我使用Angularfire2和AngularFireAuth库和GoogleAuthProvider(Google)作为我的身份验证提供程序。如何在angularfire2/auth signOut之后从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(); 
    } 
} 

当用户注销'我的网站,它的工作原理,但似乎“缓存”的谷歌认证。因此,当他们尝试第二次登录时,我遇到了几个问题:

  1. 用户不允许选择其他Google帐户进行登录。
  2. 用户自动登录...这似乎是一个安全问题。另一个用户可以访问同一个共享PC,并以前一个用户身份登录,并且不需要输入密码即可。

我在做什么错?有没有办法阻止这些证书缓存angularfire2/auth?有没有办法在用户注销我的网站时将用户注销?

回答

2

这是预期的,因为它们是2个独立的系统,每个身份验证状态都单独存储。 Firebase身份验证signOut标志您退出Firebase。要从Google退出,您必须前往Google并退出。如果这是你的应用程序的关键,你总是可以在火力地堡验证注销,重新定向到谷歌退出页面:

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

我很欣赏你的反应,并同意这是 “作为设计的”,但我仍然相信这是一个不幸的用户体验。我宁愿选择让我使用Google凭据登录,但不能同时登录Google。 – szaske

0

作为一个建议,你可以通过下面的“解决方案”在这个link做更谨慎。 我在我的应用程序中使用它,以防用户无权访问数据库,但可以在任何地方添加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>