我使用了 @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;
}
答案 0 :(得分:0)
在 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()
查询中使用 findOne()
添加凭据对象也可能会修复它。