UI路由器和Satellizer强制登录

时间:2015-02-04 22:18:34

标签: angularjs authentication angular-ui-router satellizer

我知道这个问题不是很具体,但我不知道如何解决这个问题或者我应该从哪里开始..

我正在使用Satellizer进行UI-Router身份验证。问题是我有2条路由/sign_in/profile /sign_in向服务器发出请求,返回用户信息(成功登录时)...此currentUser信息是在整个应用程序中使用...

问题是当用户在登录前尝试转到/profile时,会呈现空视图...如何在访问这些“受限制”视图之前强制用户先登录?!

我再次知道这不是一个特定的问题,但我真的不知道从哪里开始

2 个答案:

答案 0 :(得分:1)

看看在UI路由器上处理routechangestart事件,我做了类似的事情。

我认为这会给你一些线索http://arthur.gonigberg.com/2013/06/29/angularjs-role-based-auth/

关键是您需要创建某种形式的身份验证服务,您可以在其中存储用户的登录状态,并且由于服务被调用一次(单例),因此它在您的应用程序(控制器,其他服务,等等)。然后在routechangestart事件处理中,如果用户未经过身份验证,您可以阻止路由到目标页面并重定向到登录。

答案 1 :(得分:1)

我在Github Repo

中找到了答案

我们的想法是使用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;
  });
};