我想知道是否有人使用过离子和firebase并允许持久身份验证。当我创建IPA / APK并将应用程序下载到我的设备时,每次关闭应用程序时我都必须再次登录。
使用$ authWithPassword登录后,回调包括uid和token。如果我使用get import ngStorage作为依赖项,我如何使用uid和token来持久授权?
对于登录,用户登录调用登录功能,该功能链接到我工厂的Auth.login功能。
login: function(user) {
return auth.$authWithPassword({
email: user.email,
password: user.password
}, function(error, authData) {
switch(error.code) {
case "INVALID_EMAIL":
console.log("Log in with a valid email.");
break
case "INVALID_PASSWORD":
console.log("Password or email is incorrect");
break
default:
console.log("Enter a valid email and password");
}
})
.then(function(authData) {
console.log("login: Logged in with uid: ", authData);
$localStorage.uid = authData.uid;
$localStorage.token = authData.token;
})
.catch(function(error) {
alert("Error: " + error);
});
我不确定如何使用uid和token持久进行身份验证。没有用户密码可以做到吗?
提前感谢您的帮助。
答案 0 :(得分:3)
我确实在很久以前找到了答案,但忘了在这里更新。希望它对使用firebase auth和离子框架的人有用。
如问题部分所示,只需确保在登录时保存令牌。这应该适用于firebase提供的社交媒体登录。
当我第一次尝试作为第一次开发时,对我自己并不明显,但每次打开应用程序时,都可以使用保存的令牌登录用户。
在离子应用程序的.run()部分,注入$ localStorage,$ firebaseAuth和$ state添加以下内容:
if($localStorage.token) {
var token = $localStorage.token;
var ref = new Firebase('https://yourfirebaselink.firebaseio.com/');
var auth = $firebaseAuth(ref);
auth.$authWithCustomToken(token, function(error, authData) {
if (error) {
console.log("Authentication Failed!", error);
} else {
console.log("Authenticated successfully with payload:", authData);
}
}).then(function(authData) {
$state.go('main');
return true;
}).catch(function(error) {
console.log("Please sign in", error);
delete $localStorage.uid;
delete $localStorage.token;
});
} else {
$state.go('login');
console.log('not logged in');
}
总之,如果有一个令牌保存到localstorage,请使用它来使用firebases $ authWithCustomToken()登录。