reactjs - 使用 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}};
});
上面的终端日志给出了一个空对象。有什么做错了吗?
解决方案
尝试以下操作:
export const getServerSideProps = guard(async function ({
req,
res,
query,
}) {
//Assuming you have "user" session object
const user = req.session.get("user");
...
});
哈雷尔
推荐阅读
- javascript - 你能在二叉搜索树的构造中发现一个错误吗?
- c++ - UE4-根据移动方向改变移动速度
- python - 如何将代码从文本文件复制到 .py 文件?
- javascript - 我无法在 vue.js 中为我的数组实现过滤器
- assembly - 需要了解指令 ldrvsb 和 ldrbvs 指令做
- c# - 多个按钮的 MouseEnter 事件上的 Visual Studio 更改面板背景颜色
- c - 桶排序算法
- c - fork 线程安全吗?
- python - 在 jinja 的嵌套对象中选择定义的属性
- minecraft - 如何在 1.12.2 中 /fill with Armor Stand