我正在尝试使用angular和rest api构建简单的loggin,我在检查用户是否登录到登录表单控制器时遇到了奇怪的问题。
这是我的代码:
每次刷新我的应用程序时,它都会加载当前登录的用户
angular.module('myApp').run(['security', function(security) {
security.requestCurrentUser();
}]);
安全模块是这样的(简单,灵感来自angular-app)
angular.module('security').factory('security', ['SERVER_CONFIG', '$http', '$q', '$location', 'securityRetryQueue',
function (SERVER_CONFIG, $http, $q, $location, queue) {
var service = {
currentUser : null,
isAuthenticated : function () {
return !!service.currentUser;
},
login :
....
},
logout :
....
},
requestCurrentUser :
...
}
};
return service;
}]);
因此它包含有关当前用户的数据并使用isAuthenticated您可以找到用户是否已登录
angular.module('security.login').controller('LoginFormCtrl', ['$scope', 'security', function ($scope, security) {
console.log(security)
console.log(security.currentUser)
console.log(security.isAuthenticated())
}]);
console.log(security)返回属性用户填充用户数据的对象,因此方法isAuthenticated返回true
但奇怪的是:
security.user 返回 null 和 security.isAuthenticated()返回 false ,我不明白为什么用户为null ... 我需要它来访问登录页面时重定向,用户已经登录。我知道角度应用程序使用模态,这样可以解决我的问题,但我不想使用模态...
如果有人能解释我做错了什么,我会很高兴......
非常感谢Blažek
答案 0 :(得分:0)
您的应用程序在命名方面有点混乱,这可能会导致一些冲突。您的模块名为' security'并且你的工厂被命名为“安全性”,这很快就会被注入哪个地方。因此,尝试将某些内容重命名为“securityModule'和' securityFactory'区分。
现在,我通常通过应用程序持久保存数据的方式是使用如下结构的服务:
angular.module('security').service('security', ['SERVER_CONFIG', '$http', '$q', '$location', 'securityRetryQueue',
function (SERVER_CONFIG, $http, $q, $location, queue) {
// data that is persisted
var currentUser = null;
var someOtherData = null;
// internal functions
function getCurrentUser(){ ... do stuff ... }
function doOtherStuff(){ ... do stuff ... }
// public methods // for use in controllers
return {
getCurrentUser : function(){ return currentUser },
setCurrentUser : function(param){ currentUser = param }
isAuthenticated : function () {
return !!service.currentUser;
},
login :
....
},
logout :
....
},
requestCurrentUser :
...
}
};
return service;
}]);
现在要看的另一件事是你"刷新"您的应用程序,当您点击刷新时,您可能(取决于浏览器)在本地销毁所有存储的数据,然后您需要在首次加载时从服务器获取它。