目前我正在使用$on('angularFireAuth:login', function(evt,auth){...get other profile info...})
在用户登录后填写用户的个人资料和授权详情。这些内容会添加到authService中,以便以后在整个应用程序中轻松访问,而不会将其放在$rootscope
中。
问题是这不会在刷新或重新打开时触发。由于会话令牌或其他原因,用户仍然经过身份验证,但是,他们需要重新登录才能加载其他配置文件。
对此有什么合适的解决方案? 是否有一个我应该使用的无证件事件而不是登录?
这是我正在使用的app.js:
angular.module('myApp',['firebase']).
constant({FirebaseUrl:"https://<foo>.firebaseio.com/"}).
service('authService', function authService(){
return {
isLogged:false,
name:null,
email:null,
id:null,
group:null,
err:null
}
}).
controller('AuthCtrl', function($scope, authService, angularFireAuth, angularFireCollection, FirebaseUrl){
angularFireAuth.initialize(FirebaseUrl, {scope:$scope, name:"auth"});
$scope.login = function(){
angularFireAuth.login('password', {
email: 'test@test.foo',
password: 'test'
});
}
$scope.$on("angularFireAuth:login",function(evt,auth){
url = FirebaseUrl + 'profiles/user-' + $scope.auth.id;
$scope.url = url;
var fbref = new Firebase(url);
fbref.once('value',function(profileSnapshot){
$scope.name = profileSnapshot.child('name').val();
$scope.group = profileSnapshot.child('group').val();
});
//set authService stuff
authService.name = $scope.name;
authService.group = $scope.group;
authService.email = $scope.auth.email;
authService.id = $scope.auth.id;
authService.isLogged = true;
});
$scope.logout = function(){
angularFireAuth.logout();
authService.email = null;
authService.id = null;
authService.isLogged = false;
authService.name = null;
authService.group = null;
}
}).
controller('NavCtrl', function($scope, authService){
});
答案 0 :(得分:0)
您应该将配置文件信息与身份验证事件分离,因为您已经注意到,这些事件仅在身份验证状态更改时触发。您应该有一个单独的服务或工厂来处理配置文件信息,在页面加载时调用(如果用户已登录)和身份验证事件。