我有一个应用程序,我正在使用Ionic,Angular2和Firebase构建。
我目前正在做的是,当用户登录或注册时,他们的auth.currentUser
信息将保存在localStorage
中。我的代码目前假设如果用户在user
中设置了localStorage
变量,那么用户也已登录。但是,我只是意识到事实并非如此。
我的localStorage
变量user
如下所示:
我得到的就像这样:
ngOnInit() {
Promise.all([ //data storage get all..
this.storage.get('user')
])
.then(([user]) => {
this.userData = user; //set the user storage to this.userData
console.log(this.userData)
})
.catch(error => {
console.log("Storage Error.");
});
}
所以我拥有所有用户信息,除了他们实际上没有登录...所以当我这样做时:
this.afAuth.auth.onAuthStateChanged((user) => {
if (user) {
console.log(user)
} else {
console.log("Not logged in")
}
});
它显示用户未登录。当我拥有localStorage信息时,是否可以让用户保持登录状态?
或者只是让登录状态始终登录,除非用户退出?随着它永不过期?
此时我该怎么办?任何建议都会很棒!谢谢。
答案 0 :(得分:1)
Firebase管理员用户以不同的方式。您不应该依赖localstorage来检测用户是否已记录它。您应该依赖firebase来检查用户是否已登录。由于firebase是基于Web套接字构建的,因此它应该非常快。因此,请按以下方式重写ngOnInit
:
ngOnInit() {
const user = this.afAuth.auth.currentUser;
if (user) {
this.userData = user;
} else {
// force them to reauthenticate
user.reauthenticateWithCredential(credential)
.then(function() {
// User re-authenticated.
this.userData = this.afAuth.auth.currentUser;
}).catch(function(error) {
// An error happened.
});
}
}
在此处详细了解如何在Firebase中管理用户:https://firebase.google.com/docs/auth/web/manage-users。希望这会有所帮助。