2016-09-30 8 views
7

पर सही फायरबेस एथ id_token ढूँढना मैं वर्तमान में Angular 1.5.8, Firebase 3.3.0, और AngularFire 2.0.2 का उपयोग कर रहा हूं। जब मैं $firebaseAuth.$signInWithPopup पर कॉल करता हूं, तो वादा एक अग्निशामक उपयोगकर्ता के साथ आता है जिसमें firebase.user.idToken शामिल है, लेकिन जब मैं $onAuthStateChanged पर कॉल करता हूं, तो फ़ायरबेस उपयोगकर्ता .user संपत्ति के साथ वापस नहीं आता है। $ OnAuthStateChanged फ़ंक्शन से सर्वर प्रमाणीकरण के लिए उपयोग करने के लिए सही टोकन क्या है?

मैं md संपत्ति का उपयोग कर रहा था, लेकिन फिर यह काम करना बंद कर दिया और kd संपत्ति पर स्विच कर दिया और मुझे एहसास हुआ कि प्रत्येक उपयोगकर्ता के पास यह नहीं है। क्या यह _lat संपत्ति है? ऐसा लगता है कि इस तरह से काम करता है, लेकिन मुझे इसके आसपास कोई दस्तावेज नहीं मिल रहा है। या क्या यह एथ स्टेट चेंज पर टोकन का उपयोग करने का सही तरीका नहीं है? क्या कोई सर्वोत्तम अभ्यास है? यहां वह वस्तु है जिसे मैं वादे से वापस कर रहा हूं।

enter image description here

मैं छवि के लिए appologize, लेकिन क्या अजीब है कि अगर मैं JSON.stringify (firebaseUser) और इसे प्रिंट, मैं एक पूरी तरह से अलग वस्तु के साथ अंत जहां firebaseUser.stsTokenManager.accessToken मुझे सही कुंजी देना होगा है, लेकिन अगर मैं firebaseUser.stsTokenManager.accessToken आज़माता हूं तो यह कहता है कि stsTokenManager अपरिभाषित है।

{ 
    "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 
} 

कोड के सभी अब कार्यात्मक लगता है और प्रत्येक उपयोगकर्ता के लिए काम कर रहा है, लेकिन मैं सोच रहा हूँ, वहाँ इस के लिए एक सबसे अच्छा अभ्यास है? क्या मुझे कनवर्ट करने के लिए JSON का उपयोग करना चाहिए और फिर उस ऑब्जेक्ट से संपत्ति का चयन करना चाहिए? या _lat इस कुंजी को पकड़ने का सही तरीका है?

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!'); 
    }); 
    }; 
}); 

पूर्ण कोड github

+0

हम किस संस्करण के साथ काम कर रहे हैं? मुझे लगता है कि यह एंगुलरफायर है लेकिन इसका यहां भी उल्लेख नहीं किया गया है। – Kato

+0

नवीनतम संस्करण आज खींचे गए। मेरा रेपो GitHub.com/LukeSchlangen/nodeFire –

+2

कोणीय 1.5.8, फायरबेस 3.3.0, और कोणीयफायर 2.0.2 पर है। – Kato

उत्तर

8

यह स्पष्ट नहीं है तुम क्या करने कोशिश कर रहे हैं पर पाया जा सकता। Obfuscated आंतरिक गुणों का उपयोग न करें क्योंकि ये बदल जाएंगे। आपने पहले ही देखा है। सही तरीका हैऑथस्टेट चेंज श्रोता में GetToken को कॉल करना:

firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
    user.getIdToken().then(function(idToken) { 
     console.log(idToken); 
    }); 
    } 
}); 
+0

firebase.User.prototype.get टोकन को बहिष्कृत किया गया है। इसके बजाय firebase.User.prototype.getIdToken का उपयोग करें। – flashsnake

+0

मैंने जवाब अपडेट किया। – bojeil

संबंधित मुद्दे