【问题标题】:Sails.js Catch All Route + PassportSails.js 捕获所有路线 + 护照
【发布时间】:2016-10-19 17:43:27
【问题描述】:

我正在使用 Sails.js 和 Angular 2。我想在 Angular 2 中使用默认的 HTML5 路径策略。要使用 Express 服务器做到这一点,我以前做过,我需要每条路线都没有'与返回主页视图的 api 调用无关。所以在表达上,它会是这样的:

app.get('*', function(req, res) {
    res.render('index');
});

我知道这很有效,因为我目前正在另一个项目中使用它。这样,当我转到domain.com/some/route 时,服务器会返回正确的视图。如果您没有路由的通配符,则它无法匹配 URL 并且不会返回任何内容。在我的另一个项目中,我还使用身份验证中间件来检查每个 API 调用的 JWT,而不是索引调用。这样 Angular 2 应用程序可以处理登录并仍然显示一些东西。

话虽如此,我认为 Sails.js 的方式会相似。这里的不同之处在于我们使用的是 OpenID Connect,并且该服务器是独立的,并且在那里完成了身份验证。我在config/routes.js 中配置了路由,当我在列表顶部有以下路由(返回主页布局视图)时,它们工作得很好:

'/': 'HomeController.index'

然后当路径完全匹配时,它会返回正确的视图。但是我的 Angular 2 应用程序需要使用 Hash Location 策略。我尝试将该路线移动到路线列表的底部并将其更改为:

'/*': 'HomeController.index'

但是当我的应用程序尝试使用 passport-openidconnect 进行授权时,我在浏览器中收到错误消息,提示浏览器重定向了太多次。终端什么都没有显示,我什至没有在授权完成后点击认证服务器或回调函数。

我认为这很简单;我只是关注directions explained here,但他们没有工作。其他人有同样的问题吗?

提前感谢您的帮助。

【问题讨论】:

    标签: angular sails.js passport.js


    【解决方案1】:

    看起来护照优先并进行了一些自己的重定向 - 可能是因为它安装在您的 HTTP 中间件(请参阅 config/http.js)或保护HomeController.index 的策略中。如果您暂时注释掉 Passport,我的猜测是一切都会按预期工作。假设这是真的,那么您将需要深入了解重定向循环的来源(在护照或其他一些应用程序逻辑或策略中)。

    有一点需要特别注意:如果 Passport 安装在策略中,那么您需要确保该策略没有设置为保护您的包罗万象的路线。

    另外,请注意,您可能希望将 skipAssets: true 添加到您的包罗万象的路由中,以便您能够提供 CSS、图像等 - 除非您将所有这些都托管在其他地方(但即便如此,您需要考虑 favicon.icorobots.txtsitemap.xml)。

    【讨论】:

    • 这似乎是问题所在,但现在我将策略指定为基于每个控制器,如下所示:AuthController: { '*': 'policyName' },由于某种原因,策略在尝试执行之前未命中进入控制器。所以我进行了控制器操作并且没有登录,它不喜欢那样。我已经通过它进行了调试,并且在触发策略之前触发了控制器操作。
    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 2014-12-23
    • 2015-04-19
    • 2014-05-01
    • 1970-01-01
    • 2012-06-12
    • 2018-09-07
    • 2015-07-15
    相关资源
    最近更新 更多