安全路线& MEAN堆栈的模板?

时间:2014-11-23 21:11:31

标签: angularjs node.js express passport.js mean-stack

(NOOB ALERT!刚刚从Microsoft过渡到MEAN)

任何人都有一个实体模式的例子,用于为公共和私人区域使用不同的路由/布局/模板和MEAN堆栈?我已经尝试过嵌套控制器,但这会带来路线问题。我也不想复制Express和客户端应用程序中的所有路由。在一个完美的场景中,某些相对文件夹应该被视为“私有”,而其他文件应该被视为“公共”,每个区域都有不同的布局(包装)。未经过身份验证的用户应限制在公共区域。

在非SPA / MS领域,一切都在服务器端维护。保护文件,预渲染等具有一定的舒适性。因此,我注意到使用Jade构建区域的诱惑可能比我应该的更多。即使在我写这篇文章时,我也开始觉得客户端看不到任何东西应该是服务器端,除了初始布局和索引,同时使用Node应用程序进行路由,数据封送和保护路由本身。

注意:目前使用Passport进行身份验证。

提前感谢您的时间和详细答案。

1 个答案:

答案 0 :(得分:1)

快速思考:

通过获取具有特定文件夹的路线为您的部分服务。例如,您可以在partials文件夹中拥有一个public和protected文件夹。

-app
  --partials
    ---public
    ---protected

然后在受保护的路由上添加身份验证中间件。

未受保护的:

app.get( '/partials/public/*', function(){ //send partial html here } )

受保护:

app.get( '/partials/protected/*', passport.authenticate, function(){ //same as above } )


最后,在你的角度应用程序中(希望你相应地设置你的templateURL),添加一个httpInterceptor来检查响应是否为401,如果是,则重定向到登录页面 - &gt ;在这里找到:Credits to Fredrick Nackstad。这是重要的片段

var interceptor = ['$location', '$q', function($location, $q) {
    function success(response) {
        return response;
    }

    function error(response) {

        if(response.status === 401) {
            $location.path('/login');
            return $q.reject(response);
        }
        else {
            return $q.reject(response);
        }
    }

    return function(promise) {
        return promise.then(success, error);
    }
}];

$httpProvider.responseInterceptors.push(interceptor);


这将允许您让角度访问静态内容,同时仍然可以控制正在提供的内容。希望这很有用。