Ich verwende derzeit Angular 1.5.8
, Firebase 3.3.0
und AngularFire 2.0.2
. Wenn ich $firebaseAuth.$signInWithPopup
aufrufen, wird das Versprechen mit einem Firebase-Benutzer zurückgegeben, der firebase.user.idToken
enthält, aber wenn ich $onAuthStateChanged
aufrufen, wird Firebase-Benutzer nicht mit einer .user
Eigenschaft zurückgegeben. Was ist das richtige Token für die Server-Authentifizierung von der $ onAuthStateChanged-Funktion?
Ich benutzte die md
Eigenschaft, aber dann hörte es auf zu arbeiten und wechselte zu einer kd
Eigenschaft und ich erkannte, dass nicht jeder Benutzer das hat. Ist es die _lat
Eigenschaft? Es scheint so zu funktionieren, aber ich kann keine Dokumentation darüber finden. Oder ist das nicht der richtige Weg, das Token für einen Auth State Change zu verwenden? Gibt es eine Best Practice? Hier ist das Objekt, das ich von dem Versprechen zurückgegeben habe.
ich für das Bild appologize, aber seltsam, was ist, wenn ich JSON.stringify (firebaseUser) und ausdrucken, ich mit einem völlig anderen Objekt landen, wo firebaseUser.stsTokenManager.accessToken
mir den richtigen Schlüssel geben würde, aber wenn ich versuche firebaseUser.stsTokenManager.accessToken
es heißt, dass stsTokenManager
ist undefiniert.
{
"uid": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"displayName": "Luke Schlangen",
"photoURL": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"email": "[email protected]",
"emailVerified": true,
"isAnonymous": false,
"providerData": [
{
"uid": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"displayName": "Luke Schlangen",
"photoURL": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"email": "[email protected]",
"providerId": "google.com"
}
],
"apiKey": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"appName": "[DEFAULT]",
"authDomain": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"stsTokenManager": {
"apiKey": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"refreshToken": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"accessToken": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"expirationTime": XXXXXXXXXXXXXXXXXXXXXXXXXX
},
"redirectEventId": null
}
gesamte Code scheint jetzt funktional und scheint für jeden Benutzer zu arbeiten, aber ich frage mich, ist es ein Best-Practice für das? Sollte ich JSON
verwenden, um die Eigenschaft von diesem Objekt zu konvertieren und dann auszuwählen? Oder ist _lat
der richtige Weg, um diesen Schlüssel zu greifen?
var app = angular.module("sampleApp", ["firebase"]);
app.controller("SampleCtrl", function($scope, $firebaseArray,
$firebaseAuth, $http) {
var auth = $firebaseAuth();
$scope.logIn = function login(){
auth.$signInWithPopup("google").then(function(firebaseUser) {
console.log("Signed in as:", firebaseUser.user.displayName);
}).catch(function(error) {
console.log("Authentication failed: ", error);
});
};
auth.$onAuthStateChanged(function(firebaseUser){
// firebaseUser will be null if not logged in
if(firebaseUser) {
// This is where we make our call to our server
$http({
method: 'GET',
url: '/secretData',
headers: {
id_token: firebaseUser._lat
}
}).then(function(response){
$scope.secretData = response.data;
});
}else{
console.log('Not logged in.');
$scope.secretData = "Log in to get some secret data."
}
});
$scope.logOut = function(){
auth.$signOut().then(function(){
console.log('Logging the user out!');
});
};
});
Der vollständige Code kann bei github
Mit welchen Versionen arbeiten wir? Ich nehme an, dies ist AngularFire, aber es wird hier nicht einmal erwähnt. – Kato
Die neuesten Versionen gezogen heute. Mein Repo ist unter GitHub.com/LukeSchlangen/nodeFire –
Angular 1.5.8, Firebase 3.3.0 und AngularFire 2.0.2. – Kato