在使用环回渲染视图之前,如何确保用户已登录?我可以使用我的 Angular 应用程序登录前端。但我想阻止匿名用户查看该页面。
我认为这将是一个标题,类似于 headers.authorization_token,但它似乎不存在。
我正在寻找类似 connect-ensurelogin 的护照,而不必使用护照。
在使用环回渲染视图之前,如何确保用户已登录?我可以使用我的 Angular 应用程序登录前端。但我想阻止匿名用户查看该页面。
我认为这将是一个标题,类似于 headers.authorization_token,但它似乎不存在。
我正在寻找类似 connect-ensurelogin 的护照,而不必使用护照。
这是解决您的问题的 $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);
});
这是一种对我有用的可能方法(细节可能会有所不同):
设计单页 Angular 应用程序中的每个页面,以便在解析 Angular 路由时在您的一个 REST API 调用中进行。
使用 LoopBack 提供的 AccessToken/User/Role/ACL 方案保护所有 REST API 路由。
当在 REST 服务器端未检测到有效的访问令牌时,传回 401 未经授权的错误。
在客户端数据访问中,当您在 REST 调用中检测到 401 时,重定向到您的逻辑路由。
为了获得最流畅的用户体验,每当您重定向到登录时,请在全局存储用户想要访问的路由(localStore、$RootScope 等),并在用户登录并获得有效的访问令牌时重定向回那里。
这是 LoopBack 访问控制示例:https ://github.com/strongloop/loopback-example-access-control