gpt4 book ai didi

angular - firebase.auth().currentUser 为空

转载 作者:太空狗 更新时间:2023-10-29 17:32:54 24 4
gpt4 key购买 nike

我正在尝试在我的 Angular 4 应用程序中检索当前登录的 firebase 用户的 UID。不过,如果我将“firebase.auth().currentUser”记录到控制台,我会得到一个“null”。因此,“firebase.auth().currentUser.uid”给出了“无法读取 null 的属性‘uid’”错误。

根据这篇文章https://firebase.google.com/docs/auth/web/manage-users那将意味着我目前没有登录。虽然,我是,因为我可以从我的数据库中读取数据(我的规则不允许未经身份验证的用户),并且登录方法没有给出任何错误。

我还可以看到 uid 为 1 的用户已登录到 firebase 控制台 (.../u/1/project/my-project/authentication/users)

我的数据库规则:

{
"rules": {
"users": {
"$uid": {
".write": "$uid === auth.uid",
".read": "$uid === auth.uid"
}
}
}
}

注意:我没有使用任何 Firebase 登录方法。我正在使用我的 php 后端来验证用户并为 firebase 生成自定义 token ,完全按照此处所述:https://firebase.google.com/docs/auth/admin/create-custom-tokens .

Angular 4 登录代码:

constructor(private afAuth: AngularFireAuth) {
this.login();
}

login() {
console.log('We are logging in on Firebase :)');
firebase.auth().signInWithCustomToken(localStorage.getItem('firebase_token')).catch(function (error) {
console.log(error.message);
console.log('You are not logged in!');
});
this.user = firebase.auth().currentUser;
console.log(firebase.auth().currentUser);
console.log(firebase.auth().currentUser.uid);
}

控制台输出:

chat.service.ts:59 We are logging in on Firebase :)
chat.service.ts:65 null
ChatComponent_Host.html:1 ERROR TypeError: Cannot read property 'uid' of null
at ChatService.Array.concat.ChatService.login (chat.service.ts:66)
at new ChatService (chat.service.ts:23)
at _createClass (core.es5.js:9572)
at _createProviderInstance$1 (core.es5.js:9544)
at resolveNgModuleDep (core.es5.js:9529)
at NgModuleRef_.get (core.es5.js:10615)
at resolveDep (core.es5.js:11118)
at createClass (core.es5.js:10971)
at createDirectiveInstance (core.es5.js:10802)
at createViewNodes (core.es5.js:12230)
at createRootView (core.es5.js:12125)
at callWithDebugContext (core.es5.js:13506)
at Object.debugCreateRootView [as createRootView] (core.es5.js:12823)
at ComponentFactory_.create (core.es5.js:9916)
at ComponentFactoryBoundToModule.create (core.es5.js:3333)

最佳答案

当 firebase 仍未从本地加载数据时,您正在使用 currentUser 变量。因此,为了知道 currentUser 变量何时启动,您可以检查 onAuthStateChanged 的​​回调。

var currentUser;
firebase.auth().onAuthStateChanged(function(user){
// user holds the reference to currentUser variable.
});

关于angular - firebase.auth().currentUser 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44887044/

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