4

私はAngularとFirebaseを使ってウェブサイトを構築しています。私は、Angularfire2とAngularFireAuthライブラリとGoogleAuthProvider(Google)を認証プロバイダとして使用しています。anglefire2/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(); 
    } 
} 

ユーザーが自分のサイトの「ログアウト」、それは動作しますが、「キャッシュ」Googleの認証に思えます。だから、もう一度ログインしようとすると、私はいくつかの問題に遭遇します:

  1. ユーザーはログインするために別のGoogleアカウントを選択することはできません。
  2. ユーザーは自動的にログインします...セキュリティ上の問題のようです。別のユーザーが同じ共有PCにアクセスして以前のユーザーとログインし、パスワードを入力する必要はありません。

私は間違っていますか?これらの資格情報をキャッシュすることから、angularfire2/authを停止する方法はありますか?ユーザーが自分のサイトからログアウトしたときにユーザーをGoogleからログアウトする方法はありますか?

答えて

2

これは、2つの別々のシステムであり、各認証状態が別々に格納されるために必要です。 Firebase Auth signOutはFirebaseからサインアウトします。 Googleからログアウトするには、googleとサインアウトする必要があります。あなたはこのlinkで「解決策」を、以下のことで、より慎重にそれを行うことができ、提案として

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

私はあなたの応答を感謝し、 "設計どおり" これは同意するが、私はまだ信じていますそれは不幸なユーザーエクスペリエンスです。私はGoogle資格情報を使用してログインさせるオプションを希望しますが、Googleに同時にログインすることはできません。 – szaske

0

:これはあなたのアプリケーションのために重要である場合、あなたは常にFirebase認証にGoogleのログアウトページにリダイレクト、サインアウトすることができます。 ユーザーにデータベースへのアクセスが許可されていない場合でもアプリで使用していますが、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> 
関連する問題