hapi 基本身份验证凭据为空

时间:2021-02-24 12:06:23

标签: node.js hapijs 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;
    }

1 个答案:

答案 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() 添加凭据对象也可能会修复它。