小编Sou*_*tep的帖子

如何调试htaccess重写脚本

我想知道如何创建和调试这种脚本,如果你不习惯写它们(比如我),它会变得有点头疼.

你用工具来创造它们吗?

调试正在进行的任何提示,而不仅仅是创建一个本地结构,看看浏览器中发生了什么?

debugging .htaccess mod-rewrite

19
推荐指数
3
解决办法
3万
查看次数

使用passport.js和express.js(node.js)创建一个安全的oauth API

我有一个特定的问题,除非我没有以正确的方式做事.

我有一个带有双方的应用程序,一个客户端(html站点)和一个API(用express + mongodb构建).需要安全地访问API.他们都在不同的域名,现在让我们说我的网站在domain.com上,我的API在api.com:3000上.

我已经添加了护照来从Github获取访问令牌,因为我正在用他们的数据创建我的用户,所以我可以基本上"登录Github".

我目前的流程是:

1)客户端(站点),在API上打开一个弹出窗口

window.open("http://api.com:3000/oauth")
Run Code Online (Sandbox Code Playgroud)

2)快递服务器,启动护照流程:

app.get('/oauth', passport.authenticate('github'), function(req, res) {

});
Run Code Online (Sandbox Code Playgroud)

对于策略,我使用了这段代码.

3)我将回调重定向到关闭弹出窗口的URL(带有window.close()的javascript):

app.get('/oauth/callback', passport.authenticate('github', { failureRedirect: '/' }), function(req, res) {
    res.redirect('/auth_close');
});
Run Code Online (Sandbox Code Playgroud)

那时,一切都很好,我现在登录了API.我的问题是如何将数据返回给客户端,因为客户端还不知道任何有关accessToken,用户或用户ID的信息.

所以,从客户端(打开弹出窗口的网站),我尝试了不同的方法:

  • 从弹出窗口获取值:由于重定向不起作用,我忘记了弹出的javascript信息

  • 调用我的API来获取会话中的"当前用户",例如http://api.com:3000/current还有 一个请求,不理想,但这个工作.但是,我还是有问题.

如果我从浏览器访问该用户,则此/ url将返回用户,因为浏览器在标头请求中发送快速会话cookie:

Cookie:connect.sid=s%3AmDrM5MRA34UuNZqiL%2BV7TMv6.Paw6O%2BtnxQRo0vYNKrher026CIAnNsHn4OJdptb8KqE
Run Code Online (Sandbox Code Playgroud)

问题是我需要从jquery或类似的地方发出这个请求,因为会话没有发送,所以它就失败了.所以用户不会被退回:

app.get('/current', function() {
    // PROBLEM HERE, req.user is undefined with ajax calls because of the session!
});
Run Code Online (Sandbox Code Playgroud)

我发现了一种让它工作的方法,但我不满意因为我会有跨浏览器的CORS问题,它正在添加表达:

res.header("Access-Control-Allow-Credentials", "true");
Run Code Online (Sandbox Code Playgroud)

并添加withCredentials场jQuery的AJAX调用,如解释在这里.

要在本机XHR对象上设置的fieldName-fieldValue对的映射.例如,如果需要,您可以使用它将withCredentials设置为true以用于跨域请求.

$.ajax({
   url: a_cross_domain_url,
   xhrFields: {
      withCredentials: true
   }
});
Run Code Online (Sandbox Code Playgroud)

我也不满意,这是我失去了我的头通配符:Access-Control-Allow-Origin我需要指定域,作为解释在这里.

所以,我不确定我应该采取的方法,我唯一需要的是客户端从护照oauth进程获取accessToken或userID.这个想法是在每次调用API时使用该令牌来验证调用.

任何线索?

api oauth node.js express passport.js

18
推荐指数
1
解决办法
2万
查看次数

重写模块来处理站点版本文件夹(条带斜杠)

我正在使用以下规则来使用不同版本的文件夹:

RewriteEngine On
RewriteRule .* - [E=VERSION:020]
RewriteRule ^versions/(.*)$ versions/$1 [L]
RewriteRule ^(.*)$ versions/%{ENV:VERSION}/$1 [L]
Run Code Online (Sandbox Code Playgroud)

我有一个像这样的结构:

http://domain.com/versions/020/
http://domain.com/versions/020/th?=1
http://domain.com/versions/020/myfolder/
http://domain.com/versions/020/myfile.html
Run Code Online (Sandbox Code Playgroud)

但是用户可以看到:

http://domain.com/
http://domain.com/th?=1
http://domain.com/myfolder/
http://domain.com/myfile.html
Run Code Online (Sandbox Code Playgroud)

我有一个斜杠的最后一个问题,显示版本号.

第二个入口点是(仍在工作):

http://domain.com/site/

但是当用户键入url并省略结束正斜杠时的问题,如下所示:

http://domain.com/site

用户现在看到如下版本号:

http://domain.com/versions/020/site/

这是一个问题,因为我不希望用户了解其他版本.

知道如何解决这个问题吗?

apache .htaccess mod-rewrite version slash

5
推荐指数
1
解决办法
188
查看次数