仅在MEAN js中对经过身份验证的用户进行页面查看权限

时间:2015-04-15 14:49:02

标签: javascript angularjs angular-ui-router mean

我正在看MEAN js,我刚开始他们的教程,有用户和文章。

注册后,我可以正确创建一篇文章,很好。

如果我退出,如果我尝试创建文章,则返回/ article页面,它会将我正确地重定向到登录页面,但是,如果用户未登录,如何阻止查看页面?< / p>

代码没有什么特别之处,它是原始的MEAN应用程序:http://meanjs.org/

这是文章的路由:

'use strict';

// Setting up route
angular.module('articles').config(['$stateProvider',
    function($stateProvider) {
        // Articles state routing
        $stateProvider.
        state('app.listArticles', {
            url: '/articles',
            templateUrl: 'modules/articles/views/list-articles.client.view.html'
        }).
        state('app.createArticle', {
            url: '/articles/create',
            templateUrl: 'modules/articles/views/create-article.client.view.html'
        }).
        state('app.viewArticle', {
            url: '/articles/:articleId',
            templateUrl: 'modules/articles/views/view-article.client.view.html',
            controller: 'ArticlesController'
        }).
        state('app.editArticle', {
            url: '/articles/:articleId/edit',
            templateUrl: 'modules/articles/views/edit-article.client.view.html'
        });
    }
]);

目前我发现的唯一解决方案是在文章控制器中添加以下代码:

if ($scope.authentication.user === "") {
    $location.path('home/');
}

但我不认为这是最佳解决方案。

3 个答案:

答案 0 :(得分:0)

您可以在状态上使用解决方法,并在每次用户访问时检查它们是否已被授权。不确定ui-router是否包含解析。

E.g。

.state( "app.profile", { 
templateUrl:  "/build/templates/profile.html", 
controller: "ProfileCtrl",
resolve: requireUser } )


    var requireUser = { User: [ "$location", "$rootScope", "$q", "API", "Session",
    function ( $location, $rootScope, $q, API, Session )
        {
            var deferred = $q.defer();

                if( Session.get.authToken() )
                {
                    if( Session.get.user() )
                    {
                        deferred.resolve( $rootScope.user );
                    }
                    else
                    {
                        $location.path( "/login" );
                    }
                }
                else
                {
                    deferred.reject( "No user token" );
                    $location.path( "/login" );
                }

            return deferred.promise;

        } ] };

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

答案 2 :(得分:0)

为什么不使用,ng-show =&#34; authentication.user&#34;在header.client.view.html文件中导航!