首页 > 解决方案 > 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;
    }

标签: node.jshapijshapi

解决方案


在里面添加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()查询添加凭据对象也可能会修复它。


推荐阅读