Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Hapi auth cookie已设置,但request.auth.credentials为空_Javascript_Node.js_Hapi_Hapi Auth Cookie - Fatal编程技术网

Javascript Hapi auth cookie已设置,但request.auth.credentials为空

Javascript Hapi auth cookie已设置,但request.auth.credentials为空,javascript,node.js,hapi,hapi-auth-cookie,Javascript,Node.js,Hapi,Hapi Auth Cookie,我已经阅读了hapi auth cookie的文档,试图在我的网站上进行验证 cookie已设置,我可以在我的chrome浏览器开发工具应用程序选项卡中看到它 但是,当I console.logrequest.auth.credentials时,结果为null 我想用它来实现的是将用户限制为,我认为缺少的链接是请求.auth.credentials,因为它是空的 这是我的密码 const users = [ { username: 'john', pass

我已经阅读了hapi auth cookie的文档,试图在我的网站上进行验证

cookie已设置,我可以在我的
chrome浏览器开发工具应用程序选项卡中看到它

但是,当I console.log
request.auth.credentials
时,结果为null

我想用它来实现的是将用户限制为,我认为缺少的链接是
请求.auth.credentials
,因为它是空的

这是我的密码

const users = [
    {
        username: 'john',
        password: '$2b$10$nrkw6Mco2j7YyBqZSWRAx.P3XEZsZg3MNfma2ECO8rGMUTcF9gHO.',   // 'secret'
        name: 'John Doe',
        id: '2133d32a'
    }
];


await server.register(require('hapi-auth-cookie'));

    //strategy
    server.auth.strategy('session', 'cookie', {
        cookie: {
            name: 'sid-example',
            password: '!wsYhFA*C2U6nz=Bu^%A@^F#SF3&kSR6',
            isSecure: false
        },
        redirectTo: '/login',
        validateFunc: async (request, session) => {

            const account = await users.find(
                (user) => (user.id === session.id)
            );

            if (!account) {

                return { valid: false };
            }

            return { valid: true, credentials: account };
        }
    });


    server.auth.default({strategy: 'session', mode: 'try'});

   //login post
    server.route({
        method: 'POST',
        path: '/login',
        handler: async (request, h) => {

           console.log(request.payload)
            const { username, password } = request.payload;
            const account = users.find(
                (user) => user.username === username
            );

            if (!account || !(await Bcrypt.compare(password, users[0].password))) {
                console.log('user or password incorrect')
                return h.view('login');
            }

            request.cookieAuth.set({ id: users.id });
            console.log('login successful')
            return h.redirect().location("/")
         }
    })


    //restricted
    server.route({
        method: 'GET',
        path: '/restricted',
        options: {
            auth: {
                mode: 'required',
                strategy: 'session'
            }
        },
        handler: (request, h) => {


            return new Promise ((resolve, reject) => {

                let views = () => {
                    return h.view('restricted');
                }

                return resolve(views());


            });

        }
    });
我尝试将
options.auth.mode
设置为
restricted route
内的“try”,并尝试完全删除
选项

所有路由均正常工作,但即使我已登录,也无法打开受限路由


请帮助您没有正确设置cookie身份验证,您的id未定义,请将用户.id替换为帐户.id

request.cookieAuth.set({ id: account.id });