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