首页 > 解决方案 > 在 next.js 中,如何实现 session?

问题描述

我有一些 python flask 和 django 的经验,现在我正在学习 next.js 开发,并且正在努力弄清楚如何实现 session。

我的项目使用koa作为 web 服务器和 next.js 作为一个中间件,这样的代码

import next from "next";
import Koa from "koa";
import Session from "koa-session";
import Router from "koa-router";

...
const next_app = next({...});
const handle = next_app.getRequestHandler();

next_app.prepare().then(async () => {
  const server = new Koa();
  const router = new Router();
  server.use(Session(server));  // use koa-session middleware
  ...
  router.get("(.*)", async (ctx) => {
    console.log("server.js session: ", ctx.session);
    ...
    // create or update session data
    ctx.session.custom_data += 123;
    
    // but how to pass ctx.session to handle(), then to page components?
    await handle(ctx.req, ctx.res);
});

在上面的代码中,ctx.session携带了每个请求的会话数据,但问题是我不知道如何将会话数据传递给 next.js,因为 next.js 入口函数调用handle(ctx.req, ctx.res)没有将额外的会话数据作为参数.

然后我看了一下next-auth,它也提供了会话功能,我真的很困惑,要使用哪一个,为什么?

标签: javascriptnode.jssessionnext.jskoa

解决方案


推荐阅读