如果 Auth.isAuthenticated() 在刷新页面后返回 false,我想重定向到登录页面
.run(['Auth', '$state', function(Auth, $state) {
if (!Auth.isAuthenticated()) {
$state.go('login');
}
}]);
我在服务 Auth 中的 isAuthenticated
方法正确返回 true 或 false
service.isAuthenticated = function() {
var token = ApplicationStorage.getJwtToken();
return token ? true : false;
};
但这对我不起作用。如果 isAuthenticated()
返回 false
“ApplicationStorage”工厂就像
.factory('ApplicationStorage', ['store', 'APP_CONSTANTS', function(store, APP_CONSTANTS) {
var service = {};
/**
* Store token in service variable when rememberMe is false
* @type {String}
*/
service.token = '';
service.getJwtToken = function() {
return this.token ? this.token : store.get(APP_CONSTANTS.JWT_TOKEN_KEY);
};
service.storeJwtToken = function(token, rememberMe) {
// if remember me then store the token in local storage
if (rememberMe) {
store.set(APP_CONSTANTS.JWT_TOKEN_KEY, token);
}
this.token = token;
};
return service;
}])
最佳答案
我以前做过,所以你绝对可以让它发挥作用。
我推荐 angular-local-storage凉亭中的模块。而不是直接制作自己的“ApplicationStorage”。调试更少。
如果你想在 AngularJS 中做一个重定向,将 $location
注入(inject)你的 Controller 并试试这个:
angular.module('app').factory('User', localStorageService) {
return {
getCurrentUser: function() {
return localStorageService.get('currentUserId');
},
setCurrentUser: function(id) {
localStorageService.set('currentUserId', id);
}
});
然后在你的 Controller 中
angular.module('app').controller('SignInController', $location, function(User) {
if (!User.getCurrentUser()) {
// change the path
$location.path('/loginForm');
}
});
或多或少是这样的。它可能无法复制/粘贴/工作
关于javascript - AngularJS - 如果没有 token 则过渡到登录状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30097639/