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

标签 javascript angularjs authentication express

我有一个使用 Mean.js yeoman 生成器设置的应用程序。它使用 PassportJS 来设置本地身份验证。这一切都很好,我知道如何检查用户是否从 ExpressJS 路由文件登录。
问题是我的大部分页面路由都是在 Angular 路由中完成的。我知道如何使用以下代码在 Controller 中检查身份验证。

// 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 社区的新手,仍在学习社区标准。

最佳答案

在高层次上,有两种方法:

  • 使用您的 View 路由层(例如 UI 路由器)捕获“未验证”状态

  • 使用 HTTP 拦截器查找具有 401 Unauthorized 状态的请求,表明用户必须登录(或者他们的当前 session 已过期)

在实践中,您可能会结合使用两者。

对于 UI 路由器来说,有两种做法:解析或事件。

Resolves:UI Router 提供了一个很好的特性,称为 resolves,它允许您提供必须在呈现 View 之前解析的 promise 。您可以创建一个 promise 来解决您的用户状态。

事件:UI Router提供了一个$stateChangeStart事件,你可以观察这个事件,如果用户没有登录,你可以阻止它。然后你会发送给用户登录页面。这有点更有状态(您必须首先记住用户想要去的地方,以便您可以在登录后重定向)。

我为我在 Stormpath Angular SDK 上的工作选择了事件方法因为它让我可以灵活地在身份验证之上定义授权。

关于javascript - 如何检查用户是否在 AngularJS 路由器中经过身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30488716/

相关文章:

excel - 使用 VBA 将 MS Access 数据库查询导入 Excel,无需登录提示

javascript - webpack 构建后,导出的函数在 bundle.js 中未定义

php - 包括外部代码

django - 如何使用 Angular.js 前端针对 Django 应用程序运行我的 e2e 测试场景?

angularjs - 在 AngularJS 指令中加载页面后启用按钮

ruby-on-rails - 为什么authenticate_with_http_token 不起作用?

Laravel 5.4 session 和 Auth::user() 在 Controller 的构造函数中不可用

javascript - 如何使用 jQuery mobile 的 data-theme 属性制作主题切换器

javascript - 将当前元素传递给 ng-repeat 中的自定义过滤器

javascript - Angular $parsers 在 View 更改和模型更改后调用