使用 MEAN 堆栈保护路由和模板?

Posted

技术标签:

【中文标题】使用 MEAN 堆栈保护路由和模板?【英文标题】:Secure routes & templates with MEAN stack? 【发布时间】:2015-01-21 13:06:43 【问题描述】:

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

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

在非 SPA/MS 世界中,一切都在服务器端维护。保护文件、预渲染等具有一定的舒适性。正因为如此,我注意到使用 Jade 建造区域的诱惑可能超出了我应有的程度。即使在我写这篇文章的时候,我也开始觉得客户端看到的任何东西都不应该是服务器端的,除了在使用 Node 应用程序进行路由、数据编组和保护路由本身时的初始布局和索引。

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

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

【问题讨论】:

【参考方案1】:

快速思考:

通过获取特定文件夹的路线来提供您的部分。例如,您可以在您的 partials 文件夹中有一个公共和受保护的文件夹。

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

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

对于未受保护的:

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

受保护:

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

最后,在您的 Angular 应用程序中(希望您已相应地设置了模板 URL),添加一个 httpInterceptor 以检查响应是否为 401,如果是,则重定向到登录页面 -> 在这里找到: Credits to Fredrick Nackstad。这是重要的sn-p

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);

这将允许您让 Angular 访问静态内容,同时仍然可以控制所提供的内容。希望这会有所帮助。

【讨论】:

以上是关于使用 MEAN 堆栈保护路由和模板?的主要内容,如果未能解决你的问题,请参考以下文章

Express js 路由无法与 MEAN 堆栈按预期工作

JWT 令牌验证以解码和保护 MEAN 应用程序中的路由

MEAN堆栈上的登录系统架构?

RESTful Crud MEAN.js 路由

Express.js 或 Angular 用于在 MEAN 应用程序中处理路由?

使用 mongoose 保存子文档数组会创建空数组 MEAN 堆栈