我知道这个问题不是很具体,但我不知道如何解决这个问题或者我应该从哪里开始..
我正在使用Satellizer进行UI-Router身份验证。问题是我有2条路由/sign_in
和/profile
/sign_in
向服务器发出请求,返回用户信息(成功登录时)...此currentUser
信息是在整个应用程序中使用...
问题是当用户在登录前尝试转到/profile
时,会呈现空视图...如何在访问这些“受限制”视图之前强制用户先登录?!
我再次知道这不是一个特定的问题,但我真的不知道从哪里开始
答案 0 :(得分:1)
看看在UI路由器上处理routechangestart事件,我做了类似的事情。
我认为这会给你一些线索http://arthur.gonigberg.com/2013/06/29/angularjs-role-based-auth/
关键是您需要创建某种形式的身份验证服务,您可以在其中存储用户的登录状态,并且由于服务被调用一次(单例),因此它在您的应用程序(控制器,其他服务,等等)。然后在routechangestart事件处理中,如果用户未经过身份验证,您可以阻止路由到目标页面并重定向到登录。
答案 1 :(得分:1)
我们的想法是使用Repo自述文件中讨论的基于角色的身份验证。
所以禁止未经授权访问/profile
的代码如下所示
$stateProvider.state("profile", {
url: "/profile",
templateUrl: "app/profile/profile.html",
controller: "ProfileCtrl",
controllerAs: "user",
data: {
permissions: {
except: ['guest'],
redirectTo: 'sign_in'
}
}
});
鉴于您定义了guest
角色
definePermissions = function(Permission, Identity) {
Permission.defineRole('guest', function(stateParams) {
return !Identity.currentUser;
});
};