我有一个使用JWT(json web令牌)的SPA来授权api。问题是当他们登录后在浏览器上点击刷新我需要通过ajax请求验证令牌仍然有效,然后继续加载SPA。我将此添加到.run()中的哪种方法有效,但由于我的导航会在登录后发生更改,因此在验证令牌之前页面会加载,并且看起来不对。我是棱角分明的新人,但我猜这可以用诺言来完成吗?
// handle refreshing browser
if ($window.sessionStorage.token && !AuthenticationService.isLogged()) {
UserService.verify().success(function (data) {
AuthenticationService.setLogged(true);
}).error(function () {
delete $window.sessionStorage.token;
$state.transitionTo('app.login');
});
}
答案 0 :(得分:0)
我能够通过以下状态设置实现此功能:
$stateProvider
.state('app', {
abstract: true,
url: '/',
views: {
root: {
templateUrl: 'tpl/index.html'
}
},
resolve: {
User: ['$window', '$q', 'AuthenticationService', 'UserService' , function($window, $q, AuthenticationService, UserService) {
if ($window.sessionStorage.token && !AuthenticationService.isLogged()) {
var d = $q.defer();
UserService.verify().success(function (data) {
AuthenticationService.setLogged(true);
d.resolve();
}).error(function () {
delete $window.sessionStorage.token;
d.resolve();
});
return d.promise;
}
}]
}
});