出于某种原因,Angular的ui路由器和身份验证的组合对我来说并不起作用。 首先通过登录来解析应用程序状态,但是当解析时,模板视图的GET请求将被停止。
我提供的代码基于Angular.js Authentication with UI-Router
这个想法是,当用户未登录时,状态将更改为 login 。用户成功登录后,状态应更改为 app 。 在加载 InitiateAppController 之前,应该解析身份验证承诺。
-50.0,-50.0,30.00012772,-47.47203563,-50.0,29.99892056,-44.94407125,-50.0,30.00167397,-42.41610688,-50.0,29.99915497,-37.31940443,
SessionFactory 用于检查用户是否已登录。
app.config(function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/');
var authenticated = ['$q', 'SessionFactory', function ($q, SessionFactory) {
var deferred = $q.defer();
SessionFactory.isLoggedIn(false)
.then(function (isLoggedIn) {
if (isLoggedIn) {
deferred.resolve("logged in");
} else {
deferred.reject("You need to log in.");
}
});
return deferred.promise;
}];
$stateProvider
.state('login', {
templateUrl: '/partials/login-bar.html',
controller: 'SessionController',
url: '/login'
})
.state('app', {
templateUrl: '/partials/menu-bar.html',
controller: 'InitiateAppController',
url: '/',
resolve: {
authenticated: authenticated
}
});
});
当用户点击 login_bar.html 视图中的登录按钮时,将执行以下代码(摘要):
app.factory('SessionFactory', function ($resource, $http, $state) {
return {
login: $resource('api/login/', {}, {
save: {
method: 'POST'
}
}),
isLoggedIn: function(redirectToLogin) {
return $http.get('api/loggedin')
.then(function (res) {
var user = res.data; //Either 0 or a user object
if (user !== '0') {
return user;
}
if (redirectToLogin) {
return $state.go('login');
}
return false;
});
}
}
});
现在发生的事情如下:
基本上我很好奇知道如何解决这个问题。我希望状态在用户未登录时更改为 login ,并在立即登录后将其更改为 app 。
提前谢谢!
(我很乐意提供更多信息)