如何持久化Firebase登录?
我正在用Ionic Framework和Firebase开发一个应用程序。我进行了自定义登录以获取Firebase内部的数据,但每次重新启动应用程序时,我都需要再次登录。如何保持登录?用户应第一次登录,无需再次登录 这是我的服务:如何持久化Firebase登录?,firebase,ionic-framework,firebase-authentication,Firebase,Ionic Framework,Firebase Authentication,我正在用Ionic Framework和Firebase开发一个应用程序。我进行了自定义登录以获取Firebase内部的数据,但每次重新启动应用程序时,我都需要再次登录。如何保持登录?用户应第一次登录,无需再次登录 这是我的服务: (函数(){ "严格使用",; 有棱角的 .module('mytodo.login') .工厂(“物流服务”,物流服务); LoginService.$inject=[“$state”、“$ionicLoading”、“$firebaseAuth”、“$fireb
(函数(){
"严格使用",;
有棱角的
.module('mytodo.login')
.工厂(“物流服务”,物流服务);
LoginService.$inject=[“$state”、“$ionicLoading”、“$firebaseAuth”、“$firebaseObject”、“$rootScope”、“$timeout”、“fb”、“$q”];
函数LoginService($state、$ionicLoading、$firebaseAuth、$firebaseObject、$rootScope、$timeout、fb、$q){
var服务={
CustomLogin:CustomLogin,
GetCurrentUser:GetCurrentUser,
RegisterUser:RegisterUser,
};
回程服务;
自定义登录功能(电子邮件、密码){
如果(电子邮件==null |密码==null){
log('Preencha todos campos!');
返回;
}
$ionicLoading.show({
背景:错,
模板:'Carregando…'
});
$firebaseAuth().$signInWithEmailAndPassword(电子邮件,密码)。然后(函数(authData){
$rootScope.currentUser=GetCurrentUser(authData.uid);
$timeout(函数(){
$ionicLoading.hide();
$state.go('tab.todo',{});
}, 1000);
}).catch(函数(错误){
showtoos();
$ionicLoading.hide();
console.log(错误);
});
}
函数showtoos(){
ionicToast.show('Usuário ou senha inválido','middle',false,1500);
}
函数GetCurrentUser(用户ID){
var query=fb.child('/users/'+userId);
var currentUser=$firebaseObject(查询)
返回当前用户;
}
函数SaveUser(authData){
日志(authData.uid);
var defered=$q.defer();
var uid=authData.uid;
变量用户={
displayName:authData.displayName,
名称:authData.displayName,
photoURL:authData.photoURL,
电子邮件:authData.email,
emailVerified:authData.emailVerified,
providerId:authData.providerData[0]。providerId
};
var ref=fb.child('/users/'+uid);
参考一次(“价值”)
.then(功能(快照){
if(snapshot.exists()){
log('用户已经存在');
}否则{
参考集(用户);
}
微分解析(快照);
});
回报不同的承诺;
};
函数注册器(用户){
var defered=$q.defer();
$ionicLoading.show();
$firebaseAuth().$createUserWithEmailAndPassword(user.email,user.password)。然后(函数(authData){
var newUser={
name:user.name,
电子邮件:user.email,
providerId:authData.providerData[0]。providerId
};
var userId=authData.uid;
var ref=fb.child('/users/'+userId);
参考一次(“价值”)
.then(功能(快照){
if(snapshot.exists()){
//log('用户已经存在');
}否则{
ref.set(新用户)。然后(函数(用户){
$rootScope.currentUser=GetCurrentUser(userId);
})
}
微分解析(快照);
CustomLogin(user.email、user.password);
});
}).catch(函数(错误){
$ionicLoading.hide();
var errorCode=error.code;
控制台日志(错误代码);
如果(错误代码==='auth/weak password')
ionicToast.show('Erro,一个没有mínimo 6 digitos的精确数字,'middle',false,3000);
如果(errorCode==='auth/email已在使用')
ionicToast.show('Erro,o email:'+user.email+'jáexiste em nossa base de dados','middle',false,3000);
})
回报不同的承诺;
};
}
})();代码>我已经知道怎么做了。也许这不是最正确的答案,但对我来说很有效。我使用localSotrage存储用户名和密码。我也可以存储tolken,但我想创建一个“记住密码”屏幕。
当我第一次登录时,我是在我的服务中登录的
存储用户数据时service.js;
localStorage.setItem(“uPassword”,密码);
setItem(“uEmail”,电子邮件)代码>如果必须至少将密码存储为散列,则不应将用户名和密码持久化到存储中
Firebase具有以下用于再次登录的功能:
firebase.auth().onAuthStateChanged(用户=>{
})) 要重新迭代“不要自己持久化登录”这一点,firebase会为您执行此操作。我引用的是typescript,仅供参考
在官方文件()中:
本地磁盘上的位置
然后,在代码的后面部分,您需要做的就是订阅onAuthStateChanged observable
this.firebase.auth.onAuthStateChanged(user => {
if (user){
不要自己保存纯文本密码!!!!Firebase使用uid、会话API密钥等持久化用户
只需遵循Firebase文档即可。持续使用纯文本密码将导致糟糕的安全审核。如果您在loc中存储未哈希的用户凭据,这是一种糟糕的做法,会让开发人员看起来很糟糕
this.firebase.auth.onAuthStateChanged(user => {
if (user){