【问题标题】:meanjs framework client side user authenticationmeanjs 框架客户端用户认证
【发布时间】:2015-04-22 23:38:14
【问题描述】:

我正在使用 MEANJS 框架学习 MEAN 堆栈。

我想看一些如何在客户端配置路由的示例:

1) 如何禁止未登录用户访问特定路由?

2) 如何将用户重定向到登录页面,并在通过身份验证后将其返回到特定路由?

3) 我是否必须安装任何额外的模块,或者可以使用默认的 meanjs dist 来完成?

这是一个meanjs模块路由的例子:

'use strict';

//Setting up route
angular.module('cart').config(['$stateProvider',
    function($stateProvider) {
        // Cart state routing
        $stateProvider.
        state('cart', {
            url: '/cart',
            templateUrl: 'modules/cart/views/cart.client.view.html'
        });
    }
]);

我已经看到,当用户通过身份验证时,我在 $scope 中有一个可用的身份验证对象,如下所示:

{
  "user": {
    "_id": "54cf7e730d7da864c0d511f5",
    "displayName": "Korner Foxiertw",
    "provider": "local",
    "username": "fox23",
    "__v": 0,
    "updated": "2015-02-04T19:55:38.435Z",
    "created": "2015-02-02T13:41:07.791Z",
    "roles": [
      "user"
    ],
    "email": "user@gmail.com",
    "lastName": "Korner",
    "firstName": "Foxiertw"
  }
}

如何处理这些信息?

我见过上面的例子,但不是专门针对meanjs框架的。比如这个:

http://www.seanmarchetti.com/authentication_with_angularui_router.html

这些是我在客户端应用程序中的库:

"dependencies": {
    "bootstrap": "~3",
    "angular": "~1.3",
    "angular-resource": "~1.2",
    "angular-mocks": "~1.2",
    "angular-cookies": "~1.2",
    "angular-animate": "~1.3",
    "angular-touch": "~1.2",
    "angular-sanitize": "~1.2",
    "angular-bootstrap": "~0.11.2",
    "angular-ui-utils": "~0.1.1",
    "angular-ui-router": "~0.2.11",
    "font-awesome": "latest"
}

亲切的问候。

【问题讨论】:

    标签: angularjs authentication routes authorization meanjs


    【解决方案1】:

    MEAN.JS 自动将Authentication 依赖注入到您的控制器中,您应该会看到以下代码。

    $scope.authentication = Authentication;
    

    之后添加它,或者重定向到你想要的任何路径。

    if (!$scope.authentication.user) $location.path('/');
    

    【讨论】:

    • 同意。你可以在/public/modules/users/controllers/settings.client.controller.js 中看到一个例子。如果您想在其他地方使用,只需将 Authentication 依赖项注入您正在使用的任何控制器中,例如angular.module('thing').controller('MyController', ['$scope', 'Authentication', function($scope, Authentication) { $scope.user = Authentication.user; }]);
    【解决方案2】:

    由于对我来说使用 MEAN JS 框架并不复杂,因此我构建了自己的平均堆栈,并为单页应用程序提供了 SEO 支持。请看看它是否对您有用。像您的场景一样处理每个路由的身份验证

    https://github.com/saravmajestic/express-angular-seo-zombie-seed

    【讨论】:

      【解决方案3】:

      我正在研究一个类似的问题,我想只为经过身份验证的用户打开某些路由,并阻止其他人访问它们。

      我创建了一个名为 AuthenticateController 的新控制器:

          angular.module('projects').controller('AuthenticateController', ['$scope', '$stateParams', '$location', 'Authentication', 'Projects',
      function($scope, $stateParams, $location, Authentication, Projects) {
          $scope.authentication = Authentication;
          if ($scope.authentication.user === '') {
              $location.path('home/');
          }
      }
      

      并将其添加到该模块的 controller.js 文件中。

      这有一些(非常)基本的代码,用于检查用户是否经过身份验证,如果没有,则将其返回主页。然后我在 routes.js 中将路由绑定到这个控制器:

              state('createProject', {
              url: '/projects/create',
              templateUrl: 'modules/projects/views/create-project.client.view.html',
              controller: 'AuthenticateController'
          }).
      

      这个解决方案似乎有效,但是我是 MEAN 的新手(我的第一周),所以如果有人有更好的解决方案或可以详细说明,那么不仅欢迎而且鼓励提出建议。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-19
        • 2015-09-06
        • 2012-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-23
        相关资源
        最近更新 更多