node.js - hapi 基本身份验证凭据为空
问题描述
我使用了@hapi/basic
插件,并像教程一样编写了验证函数。它工作正常,我可以使用正确的用户名和密码登录,如果我发送的用户名和密码不正确,它也会返回 401 HTTP 错误。问题是,我无法在路由处理程序函数中获取凭据。它始终为空。如果可以,请你帮助我。
const validateUser = async (
request: IRequest,
username: string,
password: string,
h: Hapi.ResponseToolkit,
) => {
try {
const user = await database.manHourUserModel.findOne({ userName: username });
if (!user || !user.active) {
return {
isValid: false,
credentials: null,
};
}
const isValid = user.validatePassword(password);
return { isValid, credentials: user };
} catch (error) {
return { isValid: false };
}
};
我无法在路由处理程序函数中获得凭据:
public async login(request: IRequest, h: Hapi.ResponseToolkit) {
return request.auth.credentials;
}
解决方案
在里面添加user
对象request.auth
可能会解决这个问题:
const validateUser = async (
request: IRequest,
username: string,
password: string,
h: Hapi.ResponseToolkit,
) => {
try {
const user = await database.manHourUserModel.findOne({ userName: username });
if (!user || !user.active) {
return {
isValid: false // This is enough to throw 401.
};
}
const isValid = user.validatePassword(password);
request.auth.credentials = user; // Add manually
return { isValid };
} catch (error) {
return { isValid: false };
}
};
注意:我不确定这样做是否正确,因此升级hapi
版本或使用lean()
infindOne()
查询添加凭据对象也可能会修复它。
推荐阅读
- ios - iOS - 在下面的内容保持交互时呈现/显示 ViewController
- lua - Lua - 我对 string.find 有一点问题
- java - 尝试通过 SSH 远程运行 Forge 服务器时出现异常错误
- excel - 在表格中插入新行时公式不向下复制
- reactjs - 用“其他文本”或“图标”覆盖材料表头上的文本“操作”
- vuetify.js - Vuetify 对话框位置:在鼠标附近弹出?
- javascript - 如何将正则表达式应用于包含不同单词的相同字符串?
- linux - 将烧瓶 ASK 移植到裸机 Linux
- python - 在 Python 中使用带有矩阵函数的 numpy.meshgrid 时出错
- visual-studio-code - VSCode:如何在我的扩展程序中以编程方式在编辑器的语言更改事件上设置处理程序?