4

Ich baue eine Website mit Angular und Firebase. Ich verwende die Bibliotheken Angularfire2 und AngularFireAuth und GoogleAuthProvider (Google) als Authentifizierungsanbieter.Wie kann ich die Verbindung zur Google-Authentifizierung nach angularfire2/auth signOut trennen?

Hier ist mein Service-Code:

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(); 
    } 
} 

Wenn ein Benutzer abmeldet "von meiner Seite, es funktioniert, scheint aber die Google-Authentifizierung 'Cache'. Wenn sie versuchen, sich ein zweites Mal anzumelden, stoße ich auf einige Probleme:

  1. Der Benutzer darf kein anderes Google-Konto für die Anmeldung wählen.
  2. Benutzer wird automatisch eingeloggt ... was wie ein Sicherheitsproblem scheint. Ein anderer Benutzer könnte zum selben freigegebenen PC kommen und sich als der vorherige Benutzer anmelden und muss dazu kein Passwort eingeben.

Was mache ich falsch? Gibt es eine Möglichkeit, dass ich angularfire2/auth davon abhalte, diese Anmeldeinformationen zwischenzuspeichern? Gibt es eine Möglichkeit, Nutzer von Google abzumelden, wenn sie sich von meiner Website abmelden?

Antwort

2

Dies wird erwartet, da es sich um 2 separate Systeme handelt und jeder Auth-Status separat gespeichert wird. Firebase Auth signOut signiert dich aus Firebase. Um sich von Google abzumelden, müssen Sie zu Google gehen und sich abmelden. Wenn dies für Ihre Anwendung kritisch ist, können Sie immer auf Firebase Auth abzumelden, Umleitung auf der Google-Logout-Seite:

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

Ich schätze Ihre Antwort, und stimmen diese "so entworfen", aber ich glaube immer noch, Es ist eine unglückliche Benutzererfahrung. Ich würde eine Option bevorzugen, mit der ich mich mit Google-Anmeldedaten anmelden kann, mich aber NICHT gleichzeitig bei Google anmelde. – szaske

0

Als Anregung, können Sie es diskret an diesem link, indem Sie die „Lösung“ mehr tun könnte, . Ich benutze es in meiner App für den Fall, dass der Benutzer nicht berechtigt ist, auf die Datenbank zuzugreifen, aber Sie können den Iframe überall hinzufügen.

Logout-Service:

function LogoutService($location){ 
     this.logOut = function(myAuth){ 
      myAuth.$signOut().then(() => { 

       $location.path("/logout"); 

      }, (error) => { 
       console.log(error); 
      }); 
     }; 
    }; 

Router:

.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> 
Verwandte Themen