如何持久化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

我正在用Ionic Framework和Firebase开发一个应用程序。我进行了自定义登录以获取Firebase内部的数据,但每次重新启动应用程序时,我都需要再次登录。如何保持登录?用户应第一次登录,无需再次登录

这是我的服务:

(函数(){
"严格使用",;
有棱角的
.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){