2

在使用环回渲染视图之前,如何确保用户已登录?我可以使用我的 Angular 应用程序登录前端。但我想阻止匿名用户查看该页面。

我认为这将是一个标题,类似于 headers.authorization_token,但它似乎不存在。

我正在寻找类似 connect-ensurelogin 的护照,而不必使用护照。

4

2 回答 2

4

这是解决您的问题的 $interceptor 。

此代码检测来自 Loopback REST 服务器的 401 响应(用户未登录或访问令牌已过期)并将用户重定向到登录页面:

// Inside app config block
$httpProvider.interceptors.push(function($q, $location) {
  return {
    responseError: function(rejection) {
      if (rejection.status == 401) {
        $location.nextAfterLogin = $location.path();
        $location.path('/login');
      }
      return $q.reject(rejection);
    }
  };
});

一旦用户登录,此代码将重定向到请求的页面

// In the Login controller
User.login($scope.credentials, function() {
  var next = $location.nextAfterLogin || '/';
  $location.nextAfterLogin = null;
  $location.path(next);
});
于 2014-10-04T20:15:29.623 回答
1

这是一种对我有用的可能方法(细节可能会有所不同):

  1. 设计单页 Angular 应用程序中的每个页面,以便在解析 Angular 路由时在您的一个 REST API 调用中进行。

  2. 使用 LoopBack 提供的 AccessToken/User/Role/ACL 方案保护所有 REST API 路由。

  3. 当在 REST 服务器端未检测到有效的访问令牌时,传回 401 未经授权的错误。

  4. 在客户端数据访问中,当您在 REST 调用中检测到 401 时,重定向到您的逻辑路由。

  5. 为了获得最流畅的用户体验,每当您重定向到登录时,请在全局存储用户想要访问的路由(localStore、$RootScope 等),并在用户登录并获得有效的访问令牌时重定向回那里。

这是 LoopBack 访问控制示例:https ://github.com/strongloop/loopback-example-access-control

于 2014-09-19T18:01:00.163 回答