gpt4 book ai didi

firebase - 如何保持 Firebase 登录?

转载 作者:行者123 更新时间:2023-12-04 11:48:43 24 4
gpt4 key购买 nike

我正在使用 Ionic Framework 和 Firebase 开发一个应用程序。我进行了自定义登录以获取 Firebase 中的数据,但每次重新启动应用程序时,我都需要再次登录。我怎样才能坚持登录?用户应该第一次登录,不需要再次登录。

这是我的服务:

(function() {
'use strict';

angular
.module('mytodo.login')
.factory('LoginService', LoginService);

LoginService.$inject = ['$state', '$ionicLoading', '$firebaseAuth', '$firebaseObject','$rootScope', '$timeout', 'fb', '$q'];

function LoginService($state, $ionicLoading, $firebaseAuth, $firebaseObject, $rootScope, $timeout, fb, $q){


var service = {
CustomLogin: CustomLogin,
GetCurrentUser: GetCurrentUser,
RegisterUser: RegisterUser,
};
return service;

function CustomLogin(email, password) {
if(email ==null | password == null){
console.log('Preencha todos os campos!');
return;
}

$ionicLoading.show({
showBackdrop: false,
template: '<p>Carregando...</p><ion-spinner icon="android" style="stroke: #1d9c9e;fill:#1d9c9e;"></ion-spinner>'
});

$firebaseAuth().$signInWithEmailAndPassword(email, password).then(function(authData) {
$rootScope.currentUser = GetCurrentUser(authData.uid);

$timeout(function() {
$ionicLoading.hide();
$state.go('tab.todo', {});
}, 1000);

}).catch(function(error) {
showToast();

$ionicLoading.hide();

console.log(error);
});
}

function showToast(){
ionicToast.show('Usuário ou senha inválido', 'middle', false, 1500);
}


function GetCurrentUser(userId) {
var query = fb.child('/users/' + userId);
var currentUser = $firebaseObject(query)
return currentUser;
}

function SaveUser(authData) {

console.log(authData.uid);
var deffered = $q.defer();

var uid = authData.uid;
var user = {
displayName: authData.displayName,
name: authData.displayName,
photoURL: authData.photoURL,
email: authData.email,
emailVerified: authData.emailVerified,
providerId: authData.providerData[0].providerId
};

var ref = fb.child('/users/' + uid);
ref.once("value")
.then(function(snapshot) {
if (snapshot.exists()) {
console.log('User already exists');
} else {
ref.set(user);
}

deffered.resolve(snapshot);
});

return deffered.promise;
};

function RegisterUser(user) {
var deffered = $q.defer();
$ionicLoading.show();
$firebaseAuth().$createUserWithEmailAndPassword(user.email, user.password).then(function(authData) {
var newUser = {
name: user.name,
email: user.email,
providerId: authData.providerData[0].providerId
};

var userId = authData.uid;
var ref = fb.child('/users/' + userId);
ref.once("value")
.then(function(snapshot) {
if (snapshot.exists()) {
//console.log('User already exists');
} else {
ref.set(newUser).then(function(user){
$rootScope.currentUser = GetCurrentUser(userId);
})
}

deffered.resolve(snapshot);
CustomLogin(user.email, user.password);
});
}).catch(function(error) {
$ionicLoading.hide();
var errorCode = error.code;
console.log(errorCode);

if(errorCode === 'auth/weak-password')
ionicToast.show('Erro, a senha precisa ter no mínimo 6 digitos.', 'middle', false, 3000);

if(errorCode === 'auth/email-already-in-use')
ionicToast.show('Erro, o email: ' + user.email + ' já existe em nossa base de dados.', 'middle', false, 3000);
})

return deffered.promise;
};
}
})();

最佳答案

重申不要自己坚持登录的观点,firebase 会为您执行此操作。我从 typescript 中引用了这个仅供引用。

在官方 docs() 中:

firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL)

本地在磁盘上的位置。

然后在您的代码中,您需要做的就是订阅 onAuthStateChanged observable。
this.firebase.auth.onAuthStateChanged(user => {
if (user){

不要自己保留明文密码!!!! Firebase 使用 uid、 session API key 等持久化用户。

只需按照 Firebase 文档操作即可。保留纯文本密码将导致安全审核不佳。

关于firebase - 如何保持 Firebase 登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42878179/

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