【问题标题】:Next Auth.js - I can't get token with getToken({req})Next Auth.js - 我无法使用 getToken({req}) 获取令牌
【发布时间】:2022-07-07 12:49:51
【问题描述】:

我无法使用 getToken 获取令牌:

这个变量没问题: NEXTAUTH_SECRET=秘密 NEXTAUTH_URL=http://localhost:3000

这是我的 [...nextauth].js - 我可以做 console.log(token) 并且效果很好

import NextAuth from "next-auth";
import GoogleProvider from "next-auth/providers/google";

...
  jwt: {
    secret: process.env.JWT_SECRET,
    encryption: true,
  },
  secret: process.env.NEXTAUTH_SECRET,
  callbacks: {
    async redirect({ url, baseUrl }) {
      return Promise.resolve(url);
    },
    async jwt({ token, user, account, profile, isNewUser }) {
      return token;
    },
    async session({ session, user, token }) {
      return session;
    },
  },
});

API部分(我觉得getToken不好用):

import { getToken } from "next-auth/jwt";

const secret = process.env.NEXTAUTH_SECRET;

export default async (req, res) => {
  const token = await getToken({ req, secret, encryption: true });
  console.log(token);
  if (token) {
    // Signed in
    console.log("JSON Web Token", JSON.stringify(token, null, 2));
  } else {
    // Not Signed in
    res.status(401);
  }
  res.end();
};

【问题讨论】:

  • /pages/dashboard 页面上似乎出现了错误。你也在那儿打电话给getToken吗?你能分享那个页面的代码吗?
  • @ferhat-pektas 你解决了吗?如果是,怎么做?
  • @Jan 检查我发布的答案stackoverflow.com/a/72633273/13749032

标签: reactjs next.js next-auth


【解决方案1】:

这可能是函数中的一个错误,但我让它工作的唯一方法是使用 getToken 获取原始 jwt 令牌,然后使用 jsonwebtoken 包来验证和解码它

import { getToken } from "next-auth/jwt";
import jwt from "jsonwebtoken";
const secret = process.env.NEXT_AUTH_SECRET;
  const token = await getToken({
    req: req,
    secret: secret,
    raw: true,
  });
const payload = jwt.verify(token, process.env.NEXT_AUTH_SECRET);
console.log(payload);

【讨论】:

  • userdata 变量来自哪里?
  • 对不起,答案中不应该出现,我删除它
猜你喜欢
  • 2021-09-10
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
相关资源
最近更新 更多