You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Next-auth获取Github REST API访问令牌?

解决Github登录后获取API访问令牌的问题

要在调用getServerSession(authOptions)时拿到Github API访问令牌,需要在NextAuth的配置中添加令牌存储逻辑,具体步骤如下:

1. 配置Github Provider的权限范围

在authOptions的Github Provider配置中,指定API所需的权限范围,确保Github返回具备对应权限的访问令牌:

import NextAuth from "next-auth";
import GithubProvider from "next-auth/providers/github";

export const authOptions = {
  providers: [
    GithubProvider({
      clientId: process.env.GITHUB_ID,
      clientSecret: process.env.GITHUB_SECRET,
      // 根据需求设置权限范围,示例包含读取用户信息和仓库权限
      authorization: {
        params: {
          scope: "read:user repo",
        },
      },
    }),
  ],
  // 回调用于将令牌存入会话
  callbacks: {
    // 将访问令牌存入JWT
    async jwt({ token, account }) {
      if (account) {
        token.accessToken = account.access_token;
      }
      return token;
    },
    // 将JWT中的令牌同步到session对象
    async session({ session, token }) {
      session.user.accessToken = token.accessToken;
      return session;
    },
  },
};

export default NextAuth(authOptions);

2. 验证会话中的令牌

配置完成后,调用getServerSession(authOptions)就能获取到包含访问令牌的会话数据:

"session": {
  "user": {
    "name": "UserName",
    "email": "xxxxxxxx@gmail.com",
    "image": "https://xxxxxx.xxxxxx/xxxxx",
    "accessToken": "gho_xxxxxxxxxxxxxx"
  }
}

3. 使用令牌调用Github API

拿到令牌后,即可通过请求头携带令牌调用Github REST API:

const session = await getServerSession(authOptions);
if (session?.user.accessToken) {
  const reposRes = await fetch("https://api.github.com/user/repos", {
    headers: {
      Authorization: `Bearer ${session.user.accessToken}`,
    },
  });
  const userRepos = await reposRes.json();
  // 处理返回的仓库数据
}

注意事项

  • 确保项目根目录的.env文件中正确配置GITHUB_ID和GITHUB_SECRET,且Github OAuth应用的回调地址与项目地址一致。
  • 权限范围遵循最小必要原则,避免请求多余权限,可根据需求调整scope参数。

内容的提问来源于stack exchange,提问作者Dada878

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:03:23