【发布时间】:2016-04-24 15:09:07
【问题描述】:
我想在客户端使用 JQuery 和在服务器端使用 Node.js 设置基本的 HTTP 身份验证。 我在服务器端发出了以下 Ajax 请求来设置标头:
$.ajax({
type: "GET",
url: URL_SLACK_SERVER,
dataType: "json",
beforeSend: function(xhr){
xhr.setRequestHeader("Authorization", "Basic " +btoa("username:xxx") );
},
success:function(rsp){
filterMessages(rsp);
}
});
我想在我的服务器端使用 basic-auth 模块:
var express = require('express');
var bodyParser = require('body-parser');
var auth = require('basic-auth');
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Authorization, Accept, Key");
var cre = +auth(req);
console.log('Auth: ' +cre.username);
next();
});
但是,这样做,我遇到了一些问题:
- 我没有看到在预检 OPTIONS HTTP 请求中设置了标头:
选项 /server HTTP/1.1
主机:server.com
连接:保持活动
访问控制请求方法:GET
来源:空
用户代理:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36
访问控制请求标头:接受、授权
接受:/
接受编码:gzip、deflate、sdch
接受语言:en-US,en;q=0.8,fr;q=0.6
- 我收到以下错误,我不太理解:
请求头域 Authorization is not allowed by 预检响应中的 Access-Control-Allow-Headers。
另外,请注意,从客户端到服务器的调用是跨域调用,这就是为什么在 Node.js 文件中写了这些设置的标头。
我怎样才能有效地执行这个基本的 HTTP 身份验证?
【问题讨论】:
-
看起来您的服务器和客户端在不同的域上运行,并且服务器没有设置正确的 CORS 标头。
-
它们确实在不同的域上运行(见我问题的结尾)。我可以在服务器端添加哪些标头?
标签: javascript jquery node.js http-headers http-authentication