摘要
以下详细信息:
我当前的问题是我的网络应用没有将用户重定向到登录屏幕
我已经改变了一些代码,以便app.all用/ impulse / in捕获所有内容:
app.all('/impulse*', function(req, res, next){ isImpulse = true;
console.log('force redirect: ', isImpulse );
next();
});
为了测试的目的,我已经取出res.redirect并把它放在我的路由器中并默认设置为全局布尔值为true,因为起初我认为“app.all”没有触发或工作正确。
所以现在发生的事情是,当我的路由的下一部分触发时,它会像这样检查布尔值:
app.get('/impulse', function(req,res){
if(isImpulse){
console.log('enforce redirect');
res.redirect('/auth/login');
return;
} else { impulse.findAll}
} );
我发现的内容非常有趣。
如果我使用/ impulse /我被重定向,但是如果我使用/ #impulse /控制台吐出'强制重定向'但它没有重定向...即使res.redirect直接在此下面控制台回声...
现在我已经尝试将所有种类改为“app.all”(因为我认为这最初是问题)但是我改变代码的方式使得“app.all”无法成为问题。问题很简单,当使用/ #impulse /时,res.redirect似乎没有被触发。
我已经包含了两张我服务器控制台聊天的图片。第一个是当我输入/ impulse /(注意这个正常工作时,您可以在控制台日志中看到“强制重定向然后它会关闭并获取相关内容):
现在第二张照片是当我输入/ #impulse /控制台仍然吐出强制重定向但是在检查重定向规则之前不应该吐出它...
显然这是一个安全问题。那么当我输入/#冲动时它会显示什么?页眉和页脚显示但不显示内容。 (顺便说一句,这些都不应该显示出来。)
那么我做错了什么呢,骨干前端是否会在没有经过服务器安全检查的情况下获得这些东西? 注意:app.all已经放在路由器的顶部,它应该 - 总是先开火!
答案 0 :(得分:1)
如果我使用/ impulse /我被重定向,
这是因为您的代码正在返回正确的响应(即重定向),并且浏览器知道如何解释它并将用户重定向到响应中指示的页面。
但是,如果我使用/ #impulse /控制台吐出'强制重定向'但它并没有 重定向...即使res.redirect直接位于此控制台回显...
之下
这很可能是您的CLIENT SIDE JavaScript代码中的一个问题。进行AJAX调用时,通常需要手动评估响应并手动执行响应中指示的重定向。我不确定这如何与Backbone一起工作,但原理是一样的。
答案 1 :(得分:0)
经过大约一个星期的敲击,我发现了问题所在......
这真的是客户端,我忽略了一个非常简单的功能,浏览器不会将#urls发送到服务器,所以例如mysite.com/#admin将只是查找dom的div元素如果是管理员的ID,它不会向服务器发送请求。
这解释了一切,包括为什么我得到半载页面,因为骨干会加载静态的东西然后从服务器请求多汁的位,但服务器会拒绝任何更多的信息!
我仍然在摸索如何最好地解决这个问题,但是现在我已经有了一个开明的时刻,我想我最好与所有人分享,因为人们和我有同样的问题。< / p>
此外,欢迎提出修复建议!