gpt4 book ai didi

firebase - 在 $onAuthStateChanged 上找到正确的 Firebase 身份验证 id_token

转载 作者:行者123 更新时间:2023-12-04 01:58:49 27 4
gpt4 key购买 nike

我目前正在使用 Angular 1.5.8 , Firebase 3.3.0 , 和 AngularFire 2.0.2 .当我调用 $firebaseAuth.$signInWithPopup , promise 返回一个包含 firebase.user.idToken 的 firebase 用户, 但是当我调用 $onAuthStateChanged ,firebase 用户不会返回 .user属性(property)。 $onAuthStateChanged 函数用于服务器身份验证的正确 token 是什么?

我使用的是 md属性,但随后它停止工作并切换到 kd属性(property),我意识到并非每个用户都有。是_lat属性(property)?它似乎以这种方式工作,但我似乎找不到任何关于它的文档。或者这不是在身份验证状态更改中使用 token 的正确方法吗?有最佳实践吗?这是我从 promise 中返回的对象。

enter image description here

我为图像道歉,但奇怪的是,如果我 JSON.stringify(firebaseUser) 并打印它,我最终会得到一个完全不同的对象,其中 firebaseUser.stsTokenManager.accessToken会给我正确的 key ,但如果我尝试 firebaseUser.stsTokenManager.accessToken它说stsTokenManager未定义。

{
"uid": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"displayName": "Luke Schlangen",
"photoURL": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"email": "XXXXXXXXXXXXXXXXXX@XXXXX.com",
"emailVerified": true,
"isAnonymous": false,
"providerData": [
{
"uid": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"displayName": "Luke Schlangen",
"photoURL": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"email": "XXXXXXXXXXXXXXXXXX@XXXXX.com",
"providerId": "google.com"
}
],
"apiKey": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"appName": "[DEFAULT]",
"authDomain": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"stsTokenManager": {
"apiKey": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"refreshToken": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"accessToken": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"expirationTime": XXXXXXXXXXXXXXXXXXXXXXXXXX
},
"redirectEventId": null
}

所有代码现在似乎都可以正常工作,并且似乎适用于每个用户,但我想知道,是否有最佳实践?我应该使用 JSON转换然后从该对象中选择属性?或者是 _lat捕获这把 key 的正确方法?
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

最佳答案

目前尚不清楚您要做什么。不要访问混淆的内部属性,因为这些会改变。你已经注意到了。正确的方法是在 onAuthStateChanged 监听器中调用 getToken:

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

关于firebase - 在 $onAuthStateChanged 上找到正确的 Firebase 身份验证 id_token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39799588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com