Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular Sails.js捕捉所有路线+;护照_Angular_Sails.js_Passport.js - Fatal编程技术网

Angular Sails.js捕捉所有路线+;护照

Angular Sails.js捕捉所有路线+;护照,angular,sails.js,passport.js,Angular,Sails.js,Passport.js,我正在使用Sails.js和Angular 2。我想在Angular 2中使用默认的HTML5路径策略。要使用Express服务器实现这一点(我以前已经这样做过),我需要使用与api调用无关的所有路由来返回主页视图。所以在express中,应该是这样的: app.get('*', function(req, res) { res.render('index'); }); 我知道这是可行的,因为我目前正在另一个项目中使用它。这样,当我转到domain.com/some/route时,服务

我正在使用Sails.js和Angular 2。我想在Angular 2中使用默认的HTML5路径策略。要使用Express服务器实现这一点(我以前已经这样做过),我需要使用与api调用无关的所有路由来返回主页视图。所以在express中,应该是这样的:

app.get('*', function(req, res) {
    res.render('index');
});
我知道这是可行的,因为我目前正在另一个项目中使用它。这样,当我转到
domain.com/some/route
时,服务器返回正确的视图。如果没有路由的通配符,它将与URL不匹配,并且不会返回任何内容。在我的另一个项目中,我也在使用身份验证中间件,它在每个API调用上检查JWT,而不是索引调用。这样Angular 2应用程序就可以处理登录并仍然显示一些内容

话虽如此,我认为Sails.js的方式应该是类似的。这里的区别是我们使用的是OpenID连接,服务器是独立的,身份验证是在那里完成的。我在
config/routes.js
中配置了路由,当我在列表顶部有以下路由(返回主页布局视图)时,它们工作得非常好:

“/”:“HomeController.index”

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

“/*”:“HomeController.index”

但是,当我的应用程序尝试使用passport openidconnect进行授权时,我在浏览器中收到一个错误,表示浏览器重定向了太多次。终端中没有显示任何内容,我甚至没有在授权完成后点击auth服务器或回调函数

我想这很简单;我只是跟着他们,但他们不工作。还有其他人有同样的问题吗


提前感谢您的帮助。

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

需要特别注意的一件事是:如果策略中安装了Passport,那么您需要确保没有设置策略来保护您的catchall路由

也注意,你可能想把<代码> SkpStase:Trase< /Cord>添加到你的CasChar路由中,这样你就可以为CSS、图像等服务了——除非你拥有所有其他地方的主机(但即使是那个时候,你也要考虑<代码> Favigix.ICO/<代码>,<代码>机器人.TXT ,和<代码> SITEMAP .XML<代码> >


这似乎是个问题,但现在我将策略指定为基于每个控制器,如下所示:
AuthController:{'*':'policyName'}
,由于某种原因,策略在尝试进入控制器之前不会被命中。因此,我得到一个控制器的行动,并没有登录,它不喜欢这样。我已经调试过了,在策略被命中之前,控制器动作被命中。