Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在AngularJS路由器中检查用户是否经过身份验证?_Javascript_Angularjs_Authentication_Express - Fatal编程技术网

Javascript 如何在AngularJS路由器中检查用户是否经过身份验证?

Javascript 如何在AngularJS路由器中检查用户是否经过身份验证?,javascript,angularjs,authentication,express,Javascript,Angularjs,Authentication,Express,我用Mean.js yeoman生成器设置了一个应用程序。它使用PassportJS设置本地身份验证。这一切都很好,我知道如何检查用户是否从ExpressJS路由文件登录 问题是我的大部分页面路由都是在角度路由中完成的。我知道如何使用以下代码检查控制器中的身份验证 // Projects controller angular.module('projects').controller('ProjectsController', ['$scope', '$stateParams', '$locat

我用Mean.js yeoman生成器设置了一个应用程序。它使用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社区的新手,仍在学习社区标准

您可能正在寻找HTTP。检查请求的身份验证

发件人:

HTTP拦截器是在一个地方定义行为的好方法 了解如何使用$http为所有调用处理请求或响应 服务当您要在上设置身份验证令牌时,这将改变游戏规则 所有传出呼叫或响应特定HTTP状态错误 系统级。您可以将拦截器与非常有用的 角度存储模块,用于缓存经过身份验证的用户并检索该用户 下一次运行时


有一些好的

在高层,有两种方法:

  • 使用视图路由层(例如UI路由器)捕获“未经验证”状态

  • 使用HTTP拦截器查找状态为
    401 Unauthorized
    的请求,该状态指示用户必须登录(或其当前会话已过期)

实际上,您可能会将两者结合使用

对于UI路由器来说,有两种方法可以执行此操作:解析或事件

解析:UI路由器提供了一个名为“解析”的功能,允许您提供在呈现视图之前必须解析的承诺。您可以创建一个承诺来解析您的用户状态

事件:UI路由器提供一个
$stateChangeStart
事件,如果用户未登录,您可以观察此事件并阻止它。然后将用户发送到登录页面。这是有状态的(您必须首先记住用户想去哪里,以便登录后可以重定向)


我在上的工作中选择了事件方法,因为它使我能够灵活地在身份验证的基础上定义授权。

您可以在您的状态下使用
resolve
您不能为不同的路由和ui路由器使用不同的控制器吗?也许你可以链接到一些你难以理解的“类似帖子”上?这会很有帮助,因为它会让潜在的回答者更好地了解你在尝试什么。谢谢你的帮助!由于我已经可以访问控制器中的身份验证对象,是否有某种方法可以将该身份验证对象放入作用域中,以便我可以在路由器文件中以某种方式访问它?