【问题标题】:Page view permission to authenticated users only in MEAN js仅在 MEAN js 中对经过身份验证的用户的页面查看权限
【发布时间】:2015-06-21 14:30:44
【问题描述】:

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

一旦注册,我就可以正确地创建文章,很好。

如果我退出,如果我尝试创建一篇文章,它会返回 /article 页面,它会将我正确重定向到登录页面,但是,如果用户未登录,我如何防止查看该页面?

代码没什么特别的,就是原版MEAN app: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/');
}

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

【问题讨论】:

    标签: javascript angularjs angular-ui-router mean


    【解决方案1】:

    您可以在状态上使用解析方法,并在用户每次访问时检查他们是否经过身份验证。不确定 ui-router 是否包含解析。

    例如

    .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;
    
            } ] };
    

    【讨论】:

    • 太棒了,我为此创建了一个助手,它工作正常。谢谢。
    • 你好,MEAN 堆栈的新手,喜欢它但很挣扎。我正在尝试做同样的事情。我将 resolve:requireUser 添加到 .client.routes.js 并将其余部分添加到 clien.config.js ,这会阻止用户访问未经过身份验证但经过身份验证的用户也无法登录的页面。如果您对可能造成严重后果的问题有任何见解,我的日志中不会出现错误。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      为什么不使用,ng-show="authentication.user" on nav in header.client.view.html 文件!

      【讨论】:

        猜你喜欢
        • 2017-07-08
        • 1970-01-01
        • 2021-10-14
        • 1970-01-01
        • 1970-01-01
        • 2021-04-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-15
        相关资源
        最近更新 更多