我正在为使用NodeJS,Restify和PassportJS进行身份验证的SPA构建REST后端.除了最后一步之外,一切都正常工作,即将客户端从后端/ login/facebook/callback重定向到应用程序的主页.
我在网上搜索过,发现了很多ExpressJS的答案,但对Node-Restify没什么用处.我已经设法获取了一些代码片段,这就是我现在正在尝试的内容:
app.get('/api/v1/login/facebook/cb', passport.authenticate('facebook', { scope: 'email' }), function(req, res) {
req.session.user = req.user._id;
res.header('Location', '/#/home');
res.send();
});
Run Code Online (Sandbox Code Playgroud)
发送响应但不包括位置标题,并向客户端显示白屏.如何使用Node-Restify API进行正确的重定向?
prettyPhoto使用主题标签,但如果它们被编码(到%23),大多数浏览器都会出现404错误.这之前已经讨论:
您收到404错误,因为#callback部分不是URL的一部分.它是浏览器使用的书签,它从未在请求中发送到服务器.如果对哈希进行编码,则它将成为文件名的一部分.
为什么哈希会成为文件的一部分,因为它是由URI编码的?这不是一个bug吗?
我问,因为prettyPhoto使用主题标签并遇到同样的问题.我想加一个'?' 在哈希是最优雅的解决方案之前,我只是有点不知道如何在现有代码中做到这一点:
function getHashtag(){
url=location.href;
hashtag=url.indexOf('#gallery')!==-1)?decodeURI(url.substring(url.indexOf('#gallery')+1,url.length)):false;
return hashtag;
}
function setHashtag(){
if(typeof theRel=='undefined')return; location.hash=theRel+'/'+rel_index+'/';
}
function clearHashtag(){
if(location.href.indexOf('#gallery')!==-1)location.hash="";
}还有其他建议吗?我会考虑调整我的404页面,但这似乎更像是处理问题而不是阻止它.
谢谢!
编辑: 由于相机处理这些哈希的方式显然没有任何问题,我最终将这些规则添加到我的apache服务器:
RewriteRule ^(.*).shtml(%23|#)$ /$1.shtml [R=301,NE,L]
RewriteRule ^(.*).shtml([^g]+)gallery(.+)$ /$1.shtml#gallery$3 [R=301,NE,L]
Run Code Online (Sandbox Code Playgroud)
他们成功处理了%23引发问题的案例.
我想将用户从一个页面重定向到Node.js中的另一个页面(plain node.js)
现实生活场景:注册成功后(example.com/sigup),注册成功后我想将用户重定向到登录页面(example.com/login).
if (signUpSuccessful(request, response)) {
// I want to redirect to "/login" using request / response parameters.
}
Run Code Online (Sandbox Code Playgroud) 我有链接生成网络应用程序。我想让用户可以轻松地使用 gmail、yahoo mail 等将他们创建的链接通过电子邮件发送给其他人。Yahoo mail 有一个特殊的怪癖,我需要一个解决方法。
如果您有雅虎邮件帐户,请点击以下链接:
http://compose.mail.yahoo.com/?body=http%3A%2F%2Flocalhost%3A8000%2Fpath%23anchor
请注意,yahoo 重定向到特定的邮件服务器(例如http://us.mc431.mail.yahoo.com/mc/compose)。这样做时,它会解码十六进制代码。其中之一,%23,是一个哈希符号,在查询字符串参数值中是不合法的。%23 之后的所有信息都会丢失。
我的所有链接都已损坏,并且仅使用另一个角色不是一个选择。
直接致电 us.mc431.yahoo.com 对我来说有效,但可能不适用于所有用户,具体取决于他们的位置。
我尝试设置 html=true|false,将 URL 放入 html 标记中。什么都不起作用。有人针对这个特殊的怪癖有可靠的解决方法吗?
注意:任何基于服务器的解决方法对我来说都是不可能的。这必须是雅虎和最终用户之间的链接。
谢谢