1

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

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

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

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

4

2 回答 2

1

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

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

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

于 2015-02-04T22:24:28.270 回答
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;
  });
};
于 2015-02-06T01:37:10.617 回答