ByteNoteByteNote

字节笔记本

2026年2月21日

chatgpt-next-share:ChatGPT 账号共享解决方案

API中转
¥120

本文介绍 chatgpt-next-share,一个基于 Go 语言开发的 ChatGPT 共享程序。该项目基于 ninja 提供 ChatGPT 反代能力,并在此基础上提供账号管理、会话隔离等基础功能,方便进行分享与用户管理。

项目简介

chatgpt-next-share 是一个开源的 ChatGPT 共享解决方案,由 zapll 开发维护。截至目前,该项目在 GitHub 上已获得 119 stars,主要使用 Go 语言编写,同时包含 HTML 和 JavaScript 代码。

该项目解决了以下问题:

  • 多人共享 ChatGPT 账号时的会话隔离
  • 账号的集中管理和过期控制
  • 通过反代方式访问 ChatGPT 服务

核心特性

  • 账号管理:支持多账号管理和配置
  • 会话隔离:不同用户会话相互隔离,保护隐私
  • 代理服务:基于 ninja 提供稳定的 ChatGPT 反代能力
  • 管理后台:提供 Web 管理界面,方便账号管理
  • 过期控制:支持设置账号过期时间
  • API 拦截:可配置拦截特定 API 端点

技术栈

  • Go (31.5%) - 后端代理服务核心
  • HTML (36.7%) - 管理后台界面
  • JavaScript (30.6%) - 前端交互逻辑

主要依赖库:

  • github.com/go-resty/resty/v2 - HTTP 客户端
  • github.com/samber/lo - Lodash 风格的 Go 工具库
  • github.com/tidwall/gjson - JSON 解析
  • github.com/tidwall/sjson - JSON 修改

项目结构

text
chatgpt-next-share/
├── admin/          # 管理后台(前端)
├── share/          # 代理服务(Go 后端)
│   ├── main.go     # 主程序入口
│   ├── db.go       # 数据库操作
│   ├── func.go     # 功能函数
│   ├── proxy.go    # 代理逻辑
│   └── login.html  # 登录页面模板
├── Dockerfile      # Docker 构建
├── docker-compose.yml
└── readme.md

核心代码解析

main.go 主要逻辑

main.go 是整个代理服务的入口文件,主要功能包括:

  1. 环境变量配置

    • CNS_DATA - 数据目录
    • CNS_NINJA - ninja 服务地址
    • CNS_OFFLINE_CODE - 离线控制码
    • CNS_BLOCK_API - 需要拦截的 API 列表
  2. 代理处理逻辑 (handleProxy):

    • API 拦截检查
    • 离线模式控制
    • 用户登录验证
    • 会话 Token 管理
    • 请求转发到 OpenAI
  3. 登录流程

    • 提供自定义登录页面
    • 验证用户 Token
    • 设置 Session Cookie
  4. 用户会话处理

    • 获取和缓存 AccessToken
    • 用户信息脱敏处理
    • 账号过期检查

关键代码片段

go
// 自定义代理逻辑
func handleProxy(res http.ResponseWriter, req *http.Request) {
    // API 拦截
    if lo.Contains(blockApi, req.URL.Path) {
        http.Error(res, "Not found", http.StatusNotFound)
        return
    }

    // 离线模式检查
    if offline {
        res.WriteHeader(http.StatusServiceUnavailable)
        res.Write([]byte("Service is offline"))
        return
    }

    // 登录验证
    if req.URL.Path != "/auth/login" && req.Method == http.MethodGet {
        token, err := req.Cookie("session_token")
        if err != nil {
            http.Redirect(res, req, "/auth/login", http.StatusFound)
            return
        }
        // ...
    }

    // 请求转发
    proxy.ServeHTTP(res, req)
}

安装部署

前置要求

  • 一个解锁 ChatGPT 的网络环境
  • Docker 和 Docker Compose(推荐)
  • 或 Go >= 1.20 和 Bun >= 1.0.26

Docker 部署

bash
git clone https://github.com/zapll/chatgpt-next-share.git
cd chatgpt-next-share
docker compose up

docker-compose.yml 配置:

yaml
version: '3'
services:
  chatgpt-next-share:
    image: ghcr.io/zapll/chatgpt-next-share:latest
    container_name: chatgpt-next-share
    restart: unless-stopped
    volumes:
      - ./data:/data
    ports:
      - "3001:3001"  # 后台服务端口
      - "3000:3000"  # 代理服务端口
    environment:
      - CNS_NINJA=http://ninja:7999
      - CNS_DATA=/data
    depends_on:
      - ninja

  ninja:
    image: gngpp/ninja:latest
    container_name: ninja
    restart: unless-stopped
    environment:
      - TZ=Asia/Shanghai
    command: run --enable-webui --arkose-endpoint http://172.17.0.1:7999

源码编译部署

bash
# 设置环境变量
export CNS_DATA=$PWD/data
export CNS_NINJA=http://127.0.0.1:7999

# 启动后台服务
cd admin
bun install
bun run dev

# 启动代理服务
cd ../share
go run .

使用说明

服务启动后

添加账号步骤

  1. 在 chat.openai.com 官网登录账号
  2. 右键检查,打开调试工具
  3. 点击 Application 选项卡
  4. 找到 Name 为 __Secure-next-auth.session-token 的 Cookie
  5. 复制其 Value

登录管理后台

  • 默认账号:nextshare
  • 默认密码:cns@0001

在账号管理菜单下新建账号,粘贴上一步复制的 session-token 即可。

使用 ChatGPT

使用配置的 token(如 cns0001)即可登录使用 ChatGPT。

项目链接

分享: