我已经为我的脚本实现了基于令牌的身份验证系统。我有一个简单的服务,检查用户是否登录。我使用此服务检查每次路由更改时的用户状态。奇怪的是;我可以登录很好,并注销没有问题。但如果我再次登录,我会收到此错误:
Error: AuthenticationService.isLogged is not a function
因此我的退出功能无效。如果我重新加载页面,错误消失,我可以退出就好了。
这是注销功能:
$scope.logout = function logout() {
if (AuthenticationService.isLogged) {
AuthenticationService.isLogged = false;
localStorageService.remove('token');
$location.path("/login");
}
}
这是路线监听器:
run(['AuthenticationService', '$rootScope', '$location', function(AuthenticationService, $rootScope, $location) {
$rootScope.$on("$routeChangeStart", function(event, nextRoute, currentRoute) {
if (nextRoute.access.requiredLogin && !AuthenticationService.isLogged()) {
$location.path("/login");
$scope.apply();
}
});
服务;
module.factory('AuthenticationService', ['localStorageService', function(localStorageService) {
var auth = {
isLogged: function() {
if (localStorageService.get('token')) {
return true;
} else {
return false;
}
}
}
答案 0 :(得分:0)
工厂应该返回一个物体。
module.factory('AuthenticationService', ['localStorageService', function(localStorageService) {
var auth = {
isLogged: function() {
if (localStorageService.get('token')) {
return true;
} else {
return false;
}
}
return auth;
});
这应该有效,并且可以在http://tylermcginnis.com/angularjs-factory-vs-service-vs-provider/找到对工厂,服务和提供商的良好解读。
答案 1 :(得分:0)
Aboca在评论中提供了答案。我引用;
“AuthenticationService.isLogged = false< - 你正在杀掉这个函数,所以当你尝试AuthenticationService.isLogged()时,它说它不是一个函数,因为它是'false',只是去掉那个部分,它会运作良好“
非常感谢!