首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么NextAuth jwt不自动保存在cookies中?

为什么NextAuth jwt不自动保存在cookies中?
EN

Stack Overflow用户
提问于 2022-09-28 17:59:09
回答 1查看 17关注 0票数 0

我有两个简单的身份验证回调函数"jwt“和" session”,它们检查用户对象是否存在,如果存在则创建会话。

代码语言:javascript
运行
复制
callbacks: {
    jwt: async ({ token, user }) => {
      if(user) {
        token.id = user.id
      }
      return token
    },
    session: ({ session, token }) => {
      if(token) {
        session.id = token.id
      }
      return session
    },
  }

我的问题是,我已经搜索了很多相关的信息,为什么这个jwt不自动保存到cookie中呢?

我发现我的会话是创建的,我已经成功地“登录”了,但是如果我查看我的本地存储,就没有保存jwt cookie。

是否必须在jwt回调中手动将jwt保存到cookie中?还是jwt会话策略中甚至不需要jwt cookie?我需要jwt,因为据我所读到的中间件,大多数解决方案使用cookies并解密jwt来查看用户是否登录,而不是检查getSession()钩子。

EN

回答 1

Stack Overflow用户

发布于 2022-09-28 20:28:02

您可能需要更详细地解释您的问题,因为为了简单起见,我不能真正说明您已经实现了什么,而忽略了什么。我希望这对你有帮助:

添加cookie的步骤大致如下所示:

  1. 使用npm包创建/签名jwt,如jose或jsonwebtoken
  2. 设置响应的标题并将签名的jwt添加到响应中;将其返回给客户端
代码语言:javascript
运行
复制
import { SignJWT, jwtVerify, JWTVerifyResult } from "jose";

async function setCookie(response, user: {id: number}) {
  const token = await generateJwtToken(user);
  response.setHeader("Set-Cookie", [
    `user=${token};` +
      "expires=" + new Date(new Date().getTime() + 1 * 86409000).toUTCString() + ";"
  ]);
  response.status(200).json({message: "Successfully set cookie"})
}

async function generateJwtToken(user: { id: number }) {
  return await new SignJWT({id: user.id})
    .setProtectedHeader({ alg: "HS256" })
    .setIssuedAt()
    .setExpirationTime("24h")
    .sign(new TextEncoder().encode(process.env.YOUR_JWT_TOKEN_ENV_VAR));
}
  1. 使用与1中相同的包对进一步的请求进行jwt验证。
代码语言:javascript
运行
复制
export async function verifyJwt(request) {
  const token = request.cookies["yourCustomUser"];
  const verified: JWTVerifyResult = await jwtVerify(
    token,
    new TextEncoder().encode(process.env.YOUR_JWT_TOKEN_ENV_VAR),
  );
  verified.payload.status = 200;
  return verified.payload;
}

除此之外,您可能还需要添加sameSite=Strict、secure或path=/。要了解更多信息,您应该查看developers.mozilla,并确保添加过期Jwts等的错误处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73885959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档