我想写书,所使用的一个一个的NodeJS REST的API服务器Joyent的,并且一切正常,除了我无法验证普通用户的身份验证。如果我跳到终端并执行curl -u username:password localhost:8000 -X GET,则无法在NodeJS http服务器上获取值username:password。如果我的NodeJS http服务器类似于
curl -u username:password localhost:8000 -X GET
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337, "127.0.0.1");
,是否应该在来自回调的 req 对象中某处获取值username:password ?如何获得这些值而不必使用Connect的基本http auth?
username:password 作为base64编码的字符串 包含在Authorization标头 中 。
试试这个:
http.createServer(function(req,res){ var header=req.headers['authorization']||'', // get the header token=header.split(/\s+/).pop()||'', // and the encoded auth token auth=new Buffer.from(token, 'base64').toString(), // convert from base64 parts=auth.split(/:/), // split on colon username=parts[0], password=parts[1]; res.writeHead(200,{'Content-Type':'text/plain'}); res.end('username is "'+username+'" and password is "'+password+'"'); }).listen(1337,'127.0.0.1');
有关http授权的详细信息,请参见http://www.ietf.org/rfc/rfc2617.txt