首页 > 解决方案 > 使用 withIronSession() 访问 Next.js 页面中的会话数据

问题描述

阅读以下帖子后,https: //dev.to/chrsgrrtt/easy-user-authentication-with-next-js-18oe并咨询以下问题Using next-iron-session's "withIronSession" with Next.JS to perform simple身份验证,我仍然无法使用req.session.get('user'). 下面是我在 Next.js 项目中的实现:

创建一个实用程序

import {withIronSession} from 'next-iron-session';

const cookie = {
    cookieName: process.env.COOKIE_NAME,
    password: process.env.COOKIE_SECRET,
    cookieOptions: {secure: process.env.NODE_ENV === 'production'},
};

export const guard = (handler) => {
    return withIronSession(handler, cookie);
};

export default cookie;

创建 API 端点

const zlib = require('zlib');
import cookie from '@/utils/cookie';
const fetch = require('node-fetch');
import {withIronSession} from 'next-iron-session';

export default withIronSession(
    async (req, res) => {
        if (req.method === 'POST') {
            try {
                const request = await fetch(
                    process.env.NEXT_PUBLIC_API_BASE_URL + '/api/login',
                    {
                        method: 'post',
                        body: req.body,
                        headers: {
                            'Content-Type': 'application/json',
                            'Origin': req.headers.host || req.headers.origin,
                        },
                    }
                );

                const response = await request.text();
                const {success, data, message} = JSON.parse(response);

                // set JWT in session
                compressor(data, (x) => req.session.set('user', x));

                // persist session value
                await req.session.save();

                // console.log(req.session.get('user'));
                return res.status(201).json({success, message});
            } catch (error) {
                console.log(error);
            }
        }

        return res.status(404).json('Not found');
    },
    cookie
);

访问页面中的会话数据

export const getServerSideProps = guard(async (ctx) => {
    const {req} = ctx;

    const session = req.session.get();

    console.log({session});

    return {redirect: {destination: '/sign-in', permanent: false}};
});

上面的终端日志给出了一个空对象。有什么做错了吗?

标签: reactjsexpressnext.jssession-cookies

解决方案


尝试以下操作:

export const getServerSideProps = guard(async function ({
  req,
  res,

  query,
}) {
//Assuming you have "user" session object
const user = req.session.get("user");
...
});

哈雷尔


推荐阅读