我在AngularJS应用程序中使用ng-token-auth和devise_token_auth。我已成功实施登录和注销,但我无法执行以下操作:
我通过使用活动订阅者部分解决了问题:
myApp.run(['$rootScope',
($rootScope)->
$rootScope.isAuthenticated = false
$rootScope.$on('auth:validation-success', (e)->
$rootScope.isAuthenticated = true
)
$rootScope.$on('auth:login-success', (e)->
$rootScope.isAuthenticated = true
)
$rootScope.$on('auth:validation-error', (e)->
$rootScope.isAuthenticated = false
)
$rootScope.$on('auth:invalid', (e)->
$rootScope.isAuthenticated = false
)
$rootScope.$on('auth:login-error', (e)->
$rootScope.isAuthenticated = false
)
$rootScope.$on('auth:logout-success', (e)->
$rootScope.isAuthenticated = false
)
$rootScope.$on('auth:account-destroy-success', (e)->
$rootScope.isAuthenticated = false
)
$rootScope.$on('auth:session-expired', (e)->
$rootScope.isAuthenticated = false
)
])
但是,我不确定这是最好的方法。也许我应该这样做 服务呢?
关于2,我已经安装了angular-resource并配置了User
资源,但我不确定在哪里检索用户信息(服务?控制器?)以及如何更新它当用户更新他们的个人资料时(我应该只是听事件订阅者还是只是重新加载每个状态变化的信息?)。
我对Angular很新,所以如果我做错了什么,请告诉我。
答案 0 :(得分:2)
我强烈建议您创建一种UserService,它将包含您的所有身份验证和用户数据,以及您对用户的所有逻辑功能,以及使用User资源进行获取,创建,更新,删除,验证,注销等... 你应该真的避免在这里使用$ rootScope,这不是它的意思,你真的不需要在$ rootScope上放置数据。
所以在UserService中,我建议你保存用户的信息,
function UserService(User) {
var _user = null;
this.getUserFromServer = function(userid) {
User.get(userId).$promise.then(user) { _user = user; };
}
this.isAuthenticated = fucntion (){
return user !== null;
}
this.logoff = fucntion (){
user = null;
}
}
所以这样我解决了你遇到的两个问题, 使用您创建的事件侦听器来触发上述函数。
祝你好运。