NextAuth jwt 作为 header.Authorization Bearer Token Next Js

Posted

技术标签:

【中文标题】NextAuth jwt 作为 header.Authorization Bearer Token Next Js【英文标题】:NextAuth jwt as header.Authorization bearer Token Next Js 【发布时间】:2021-05-10 15:42:31 【问题描述】:

我有一个内置节点的 API,从技术上讲它应该获取 cookie,但没有获取它。

cookie: __Secure-next-auth.session-token || next-auth.session-token

在我的 Next JS 中,我使用 nextAuth,在我的令牌有效负载中,我具有以下属性:


  "name": "Justin",
  "email": "justinzu93@gmail.com",
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7Il9pZCI6IjYwMWUwMWViZjNjZjkyMjcwMDI3ZmIzMCJ9LCJleHAiOjE2MTI4Nzc3ODEsImlhdCI6MTYxMjYxODU4MX0.BY7kVTHF5mhzTr6uUhyBmxXYYsm3LlMYnlULSzWZdc0",
  "_id": "601e01ebf3cf92270027fb30",
  "iat": 1612620162,
  "exp": 1612630962

所以,我的想法是从 node.JS 获取 cookie,但这是不可能的。请帮忙

这是我的 cookie 的外观:

我想提一下这是我从节点获取 cookie 的方式:

const jwtExtractor = (req) => 
  let token = null;
  if (req.headers.authorization) 
    token = req.headers.authorization.replace("Bearer ", "").trim();
   else if (req.body.token) 
    token = req.body.token.trim();
   else if (req.query.token) 
    token = req.query.token.trim();
   else if (req && req.cookies["next-auth.session-token"]) 
    const userCookie = jwt.decode(req.cookies["next-auth.session-token"]);
    token = userCookie.accessToken;
  

  // if (token) 
  //   // Decrypts token
  //   token = auth.decrypt(token)
  // 
  return token;
;

我也不知道为什么我不能在 useEffect 钩子(下一个 JS)中访问 Session()。

谢谢。

【问题讨论】:

除非你使用一些中间件,否则你应该通过req.headers.cookie访问cookies字符串。 是的,我正在使用从 header 、 body 或 cookie 获取 cookie 的中间件,但是使用 cookies ir 返回一个空对象,看起来它不存在 那是什么中间件? 我正在使用护照 【参考方案1】:

很难准确说出您的代码发生了什么,因为我看不到通过网络进行的实际调用。但是根据您提供的内容,我最好的猜测是您的jwtExtractor 代码只是有点偏离,或者您的令牌没有通过网络传递。我的调试建议是首先查看网络调用并查看“请求标头”并确保您看到您的令牌正在传递。一旦你看到它被传递,那么你应该知道你的jwtExtractor 代码应该访问哪个对象。

【讨论】:

以上是关于NextAuth jwt 作为 header.Authorization Bearer Token Next Js的主要内容,如果未能解决你的问题,请参考以下文章

有效的 JWT 对 NestJS 守卫无效

如何在 React 中将 JWT 发送到后端?

NextAuth : 使用 NextAuth 时无法查询用户模型

NextJS 和 NextAuth 会话用户对象由于 [...nextauth.ts] 被触发重新编译而丢失

NextAuth 与自定义凭据提供程序不创建会话

添加自动前缀后,社交登录(nextauth)无法使用