如何在AngularJS路由器中检查用户是否被认证
How to check if user is authenticated in AngularJS router?
我有一个使用Mean.js约曼生成器设置的应用程序。它使用PassportJS来设置本地身份验证。这一切都很好,我知道如何检查用户是否从ExpressJS路由文件登录。
问题是我的大部分页面路由都是在角路由中完成的。我知道如何使用以下代码检查控制器中的身份验证。
// Projects controller
angular.module('projects').controller('ProjectsController', ['$scope', '$stateParams', '$location', 'Authentication', 'Projects',
function($scope, $stateParams, $location, Authentication, Projects) {
$scope.authentication = Authentication;
但是我如何检查路由中的身份验证呢?例如,在这个路由文件中,我如何只允许通过身份验证的用户访问工具html文件,并将未登录的用户重定向回主页:
'use strict';
//Setting up route
angular.module('analysis').config(['$stateProvider',
function($stateProvider) {
// Projects state routing
$stateProvider.
state('imageAnalysis', {
url: '/analysis',
templateUrl: 'modules/analysis/views/tools.client.view.html'
});
}
]);
我知道有类似的帖子,但我很难理解其中的许多。谢谢,我真的很感激你的帮助。我是stackoverflow社区的新手,还在学习社区标准。
在高层次上,有两种方法:
-
使用视图路由层(例如UI Router)捕获" unauthenticated "状态
-
使用HTTP拦截器查找具有
401 Unauthorized
状态的请求,指示用户必须登录(或其当前会话已过期)
在实际中,您可能会使用两者的组合。
对UI路由器来说,做这件事有两种方式:解析或事件。
Resolves: UI路由器提供了一个很好的特性,叫做Resolves,它允许你提供一个必须在视图呈现之前被解析的承诺。你可以创建一个promise来解析你的用户状态。
Events: UI路由器提供了一个$stateChangeStart
事件,如果用户没有登录,你可以观察这个事件并阻止它。然后将用户发送到登录页面。这是一个更有状态的(你必须记住用户想要去的地方,所以你可以在登录后重定向)。
我在Stormpath Angular SDK中选择了事件方法,因为它给了我在身份验证之上定义授权的灵活性。
您可能正在寻找HTTP拦截器。检查请求是否正确。
从OneHungryMind:HTTP拦截器是在一个地方定义行为的好方法查看如何使用$http处理所有调用的请求或响应服务。当您想要设置认证令牌时,这将改变游戏规则的所有传出呼叫或响应特定HTTP状态错误系统级。您可以将拦截器与非常有用的Angular Storage模块,用来缓存和检索经过身份验证的用户下次运行时。
有一些很好的教程(1)在那里(2)!
- 如何使用jquery确定用户是否年满18岁
- javascript跨浏览器确定用户是否滚动到页面底部
- javascript移动交叉浏览器确定用户是否滚动到页面底部
- 如何检查用户是否使用$routeChangeStart登录angularjs
- 如何检测用户是否在同一会话中打开了多个窗口或选项卡
- 询问用户是否要打开地理位置
- 检测用户是否具有打印功能
- 检查用户是否在Orchard CMS中获得授权
- HTML.如何检查用户是否在表单中输入了文本
- 如何检查用户是否开始关注
- 检查用户是否正在访问纯根url
- 检测用户是否有从其重定向的意图's页
- 如何发现用户是否使用jQuery滚动到HTML容器的末尾
- 使用jQuery检测用户是否退出全屏视频
- 检查用户是否具有角色分析云代码
- 如何检查用户是否已经在NodeJs-Mongoose中关注其他用户
- 检查请求的用户是否是django中的所有者
- 如何检测用户是否移动了滚动条
- Facebook JavaScript SDK 检查用户是否为粉丝(错误:指定的版本无效)
- 有没有办法检测用户是否真的远离计算机