meanjs框架客户端用户认证

时间:2015-03-12 04:12:19

标签: angularjs authentication routes authorization meanjs

我正在学习使用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"
}

亲切的问候。

3 个答案:

答案 0 :(得分:3)

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

$scope.authentication = Authentication;

之后只需添加,或重定向到您想要的任何路径。

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

答案 1 :(得分:0)

因为对我来说使用MEAN JS框架并不复杂,所以我建立了自己的平均堆栈,对单页应用程序提供SEO支持。请查看它是否对您有用。处理每个路径的身份验证

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

答案 2 :(得分:0)

我正在查看类似的问题,我想仅向经过身份验证的用户打开某些路由,并阻止其他人访问这些路由。

我创建了一个名为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的新手(我的第一周),所以如果有人有更好的解决方案或者可以详细说明那么建议不仅欢迎而且鼓励。