TL; DR-我需要在Vercel无服务器功能中获取请求的连接ID,并且
express
(request.connection.id
)使用的常规值未在Vercel中定义。作为一种解决方法,我可以创建一个随机的int客户端,并将其用作连接ID,这似乎很麻烦
我正在尝试在部署到Vercel的无服务器功能(以前为ZEIT / now.sh)中设置NTLM身份验证。我已经使用以下命令在Node中正常工作了
const express = require('express');
const ntlm = require('express-ntlm');
var app = express();
app.use(ntlm({
domain: 'MyDomain',
domaincontroller: 'ldap://MyDomain.com'
}));
app.get('/', (req, res) => {
res.end(JSON.stringify(req.ntlm))
});
app.listen(8080);
现在我正在尝试做同样的事情,但是是从Vercel serverless function开始的。我有一个简单的index.html
文件,其中脚本标记调用fetch('/api/auth')
,此请求由文件/api/auth.js
处理。 Vercel希望脚本不使用express
,而是在每个脚本中导出(request, response)
处理程序以处理对该路由的请求。
我正在尝试通过在request
对象需要的express-ntlm
对象上添加一些额外的属性来使用快速中间件
const ntlm = require('express-ntlm');
const ntlmMiddleware = ntlm({
domain: 'MyDomain',
domaincontroller: 'ldap://MyDomain.com'
})
module.exports = (req, res) => {
// recreate express stuff used in the middleware
res.sendStatus = statusCode => res.status(statusCode).send();
req.protocol = req.headers['x-forwarded-proto']
req.originalUrl = req.url
req.get = property => req.headers[property];
ntlmMiddleware(req, res, () => {
console.log({source: 'ntlm', args: arguments, ntlm: req.ntlm});
res.status(200).send('Success');
})
}
运行此命令时,我收到express-ntlm
的{{1}}记录的错误
我找到了the line where this log comes from,并因此而失去了Unexpected NTLM message Type 3 in new connection for URI http://localhost:3000/api/auth
参数上的另一个属性-request
,并验证了该值当前为request.connection.id
如果为undefined
提供了一个硬编码的值,那么我就可以进行身份验证,但是在实际部署时这将不起作用。 有人知道我在Vercel中可以从哪里获得该请求的连接ID吗?我尝试进行随机int运算,但是,按预期,这是行不通的。
我猜我需要的东西埋在request.connection.id
参数的某个地方。如果此功能不可用,那么看来我可以创建一个随机的int客户端,并通过请求查询发送它,但这感觉很hacky。
非常感谢您的帮助/指导!