gpt4 book ai didi

angularjs - 我怎样才能干掉Angularfire session 授权($onAuthStateChanged)

转载 作者:行者123 更新时间:2023-12-01 00:39:48 26 4
gpt4 key购买 nike

目前我有一个授权系统来使用 angularfire 跟踪用户登录/注销状态。我正在查看的指南建议在每个 Controller 中使用 $onAuthStateChanged 。

$rootScope.authObj.$onAuthStateChanged(function(firebaseUser) {
if (firebaseUser) {
console.log("Signed in as:", firebaseUser.uid);
});
} else {
console.log("Signed out");
}
});

相反,我一直在使用 $rootScope.session 变量来跟踪我当前登录的用户。这在大多数情况下都很好用,但我无法在其他 Controller 开始时访问这个 session 变量,因为此时对象没有被实例化。是否有一种干净的方法可以在 Controller 范围内访问此 session 变量,这样我就不必在每个函数中都对数据库进行新的引用(因为这些函数是在设置 session 变量后调用的)。

为了让事情更清楚一点。
ref = firebase.database().ref("users/" + $rootScope.session.id + '/meetings');
list = $firebaseArray(ref);

在我的 Controller 顶部不起作用,因为 $rootScope.session.id 尚未设置。


$scope.addMeeting = function() {
ref = firebase.database().ref("users/" + $rootScope.session.id + '/meetings');
list = $firebaseArray(ref);
list.$add({
name: $scope.meetingname,
date: firebase.database.ServerValue.TIMESTAMP
});

};

确实作为按钮单击时调用的函数工作,该按钮始终在页面加载之后,因此这意味着 $rootScope.session.id 由该点设置。

- - - - - - -更新 - - - - - - - - -

我已经使用 firebases 建议的方法让它工作了,但它看起来并不漂亮。它涉及将所有内容嵌套在 firebase 的 Auth 对象上的监听器中,然后使用 if 语句确保用户对象不为空。
myApp.controller('MeetingsController', ['$scope', '$rootScope', '$firebaseAuth', '$firebaseArray', function($scope, $rootScope, $firebaseAuth, $firebaseArray){

var authObj = $firebaseAuth();
authObj.$onAuthStateChanged(function(firebaseUser) {

if (firebaseUser) {
var ref = firebase.database().ref("users/" + firebaseUser.uid + '/meetings');
var meetings = $firebaseArray(ref);

$scope.addMeeting = function() {
meetings.$add({
name: $scope.meetingname,
date: firebase.database.ServerValue.TIMESTAMP
});
};

$scope.deleteMeeting = function(key) {
meetings.$remove(meetings.$getRecord(key)).then(function(ref) {
})
.catch(function(error){
console.log(error);
});
};
}
}); //onAuthStateChange

}]);

最佳答案

$rootScope对于这种存储来说是一个糟糕的选择,因为每次刷新页面时它都会被清理。

您应该查看 ngStorage .它带有$localStorage$sessionStorage ,请阅读以了解更适合您需求的内容。

然后添加ngStorage到您的模块并注入(inject) $localStorage给 Controller 。

$localstorage.sessionId = id;

这会将 id 存储在您的浏览器中。

关于angularjs - 我怎样才能干掉Angularfire session 授权($onAuthStateChanged),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38270644/

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