From 510386dc548011915884414d78130fac74f43ab0 Mon Sep 17 00:00:00 2001 From: YANGJIANKUAN Date: Fri, 23 Jan 2026 15:55:51 +0800 Subject: [PATCH] feat: auth_token support --- cc-env-from-profiles.sh | 46 ++++++++++++++++++++++++++--------------- profiles.json | 7 +++++++ 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/cc-env-from-profiles.sh b/cc-env-from-profiles.sh index ab7168a..d7c1e5c 100755 --- a/cc-env-from-profiles.sh +++ b/cc-env-from-profiles.sh @@ -3,9 +3,9 @@ # 轻量版 Claude Code 环境变量部署脚本(基于 profiles.json) # 要求: # 1) 读取 profiles.json 展示可选列表 -# 2) 选择后按照 env-deploy.sh 的参数写入:ANTHROPIC_BASE_URL、ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN(空) -# 3) 略去不必要的环境检查,假定环境完备(含 jq、node 可用) -# 4) 使用 Node 调用 /Users/kid/.claude/cc-aicodemirror-statusline-plus/save-cookie.js 传入所选 profile 的 cookie +# 2) 选择后按照 env-deploy.sh 的参数写入:ANTHROPIC_BASE_URL、ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN +# 3) 略去不必要的环境检查,假定环境完备(含 jq 可用) +# 4) 禁用 save-cookie 的使用 set -e @@ -55,8 +55,20 @@ if [ "$INDEX" -lt 0 ] || [ "$INDEX" -ge "$COUNT" ]; then fi SELECTED_NAME=$(jq -r ".profiles[$INDEX].name" "$PROFILES_JSON") -API_KEY=$(jq -r ".profiles[$INDEX].api_key" "$PROFILES_JSON") -COOKIE=$(jq -r ".profiles[$INDEX].cookie" "$PROFILES_JSON") +API_KEY=$(jq -r ".profiles[$INDEX].api_key // empty" "$PROFILES_JSON") +AUTH_TOKEN=$(jq -r ".profiles[$INDEX].AuthToken // .profiles[$INDEX].auth_token // empty" "$PROFILES_JSON") +PROFILE_BASE_URL=$(jq -r ".profiles[$INDEX].baseUrl // .profiles[$INDEX].base_url // empty" "$PROFILES_JSON") + +# AuthToken 与 API Key 互斥:AuthToken 优先 +if [ -n "$AUTH_TOKEN" ]; then + API_KEY="" +elif [ -n "$API_KEY" ]; then + AUTH_TOKEN="" +fi + +if [ -n "$PROFILE_BASE_URL" ]; then + ANTHROPIC_BASE_URL="$PROFILE_BASE_URL" +fi echo -e "\n选择的 Profile:${GREEN}$SELECTED_NAME${NC}" @@ -99,7 +111,7 @@ if [[ "$CURRENT_SHELL" == "fish" ]]; then # Claude Code Environment Variables (auto from profiles) set -x ANTHROPIC_BASE_URL "$ANTHROPIC_BASE_URL" set -x ANTHROPIC_API_KEY "$API_KEY" -set -x ANTHROPIC_AUTH_TOKEN "" +set -x ANTHROPIC_AUTH_TOKEN "$AUTH_TOKEN" # End Claude Code Environment Variables EOF else @@ -108,7 +120,7 @@ else # Claude Code Environment Variables (auto from profiles) export ANTHROPIC_BASE_URL="$ANTHROPIC_BASE_URL" export ANTHROPIC_API_KEY="$API_KEY" -export ANTHROPIC_AUTH_TOKEN="" +export ANTHROPIC_AUTH_TOKEN="$AUTH_TOKEN" # End Claude Code Environment Variables EOF fi @@ -116,20 +128,20 @@ fi # 立刻在当前会话导出 export ANTHROPIC_BASE_URL="$ANTHROPIC_BASE_URL" export ANTHROPIC_API_KEY="$API_KEY" -export ANTHROPIC_AUTH_TOKEN="" +export ANTHROPIC_AUTH_TOKEN="$AUTH_TOKEN" echo -e "${GREEN}[OK]${NC} 已写入并激活环境变量:" echo "ANTHROPIC_BASE_URL=$ANTHROPIC_BASE_URL" -echo "ANTHROPIC_API_KEY=****${API_KEY: -4}" -echo "ANTHROPIC_AUTH_TOKEN=\"\"" - -# 调用 Node 脚本保存 cookie -NODE_SCRIPT="/Users/kid/.claude/cc-aicodemirror-statusline-plus/save-cookie.js" -if [ -f "$NODE_SCRIPT" ]; then - node "$NODE_SCRIPT" "$COOKIE" - echo -e "${GREEN}[OK]${NC} 已调用 Node 保存 cookie" +if [ -n "$API_KEY" ]; then + echo "ANTHROPIC_API_KEY=****${API_KEY: -4}" else - echo -e "${RED}[WARN]${NC} 未找到 Node 脚本:$NODE_SCRIPT,跳过保存 cookie" + echo "ANTHROPIC_API_KEY=" +fi + +if [ -n "$AUTH_TOKEN" ]; then + echo "ANTHROPIC_AUTH_TOKEN=****${AUTH_TOKEN: -4}" +else + echo "ANTHROPIC_AUTH_TOKEN=" fi echo -e "\n${GREEN}完成!${NC} 新开终端会话即生效,或运行:source \"$CONFIG_FILE\"" diff --git a/profiles.json b/profiles.json index a2510d6..60d08d0 100644 --- a/profiles.json +++ b/profiles.json @@ -2,13 +2,20 @@ "profiles": [ { "name": "13814521983", + "baseUrl": "https://api.aicodemirror.com/api/claudecode", "api_key": "sk-ant-api03-YoEoLVS4EJH9uOBQJgzeMYFZfaJodI4dvx4BNpYA2-bHBZFWLxx8mo0PiKQY0x_AmUAwMIac1vkg9a0ZaSVmyQ", "cookie": "__Host-authjs.csrf-token=03f119d89d975253dd566e250570c9ba4034da29d888c46b6e238ef9852daa6f%7Cc83009619b16022269baf73f584bc16a2501aaadc62850bfb6acec5ac2b53ca4; __Secure-authjs.callback-url=https%3A%2F%2Fwww.aicodemirror.com; acw_tc=3ccdc15217642097618241160e596c432675c7a3127259c29ecc856cd626b3; cf_clearance=EPW5mX47LTKGtw7k1uJ8niHj2hlUiYY_d0AF_BAm6Hg-1764209763-1.2.1.1-X.SyNDeDH2t5CCCs7JGEp3NGYhwpHRlfxNapgw6hQUk5W.RN6t5F.D7ZSko7rK7J6Wn4bdgNubb.Xm3XRexyBj_phKrjulkzAbaFbt1q1NH0x8vx4un09evjhhx7kRGwWkaNmoZyhue4CpJsRZVBolp9h4rnjeJdkoNwi3dgzYrbSJLILCFvTJPVWgp9T3zs1opUksuGgs1HVvQYWhf.3bkI0ly4xjTBcvulHyGYZDQ; __Secure-authjs.session-token=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwia2lkIjoidHJpaENuTkRQc3JoMDh6ZURKQ1FjVzRRTFFtanhuaGhyZGFMRGIyT05EbDR6enlGTERJcGgyZVE3dGRvc295dzRIYzA2emI2QWVxVmVTYUpxX0ZmaFEifQ..4kM13gE3KLOi6_Yp8wTMRw.2hk2ecoAGTc7buw305Vj0ilk5PNjSgwUteo4AL1nptoyKJiSYdxcoK1DPmk297dGqwkDy6b7JTZ6kmjLHnp0-VvjjNcsGIokl0Y-wNF8ALqO6jPjQGwaSAXjOxNt3ksQX3ndwuUojSKioaMHuIbJf6mOahmpiu8uxDns-NQaNSsQYXGGhFO0duQpdZ98o2GIYpbeOmnxo5_KFCl2O4HUxLU5MaWVnNGNBvAgVtE1OhQJQ7d7g3ceLy5ChTld8du9ECDq4nG-apgJJR-TXvDjAOzBgTP46n6ESs1wVhmlhYmRY5QPo9qheKlbfZTOMMQ3NHz6U38UMmNKMjt7BuyOXYJIGDs_p8RjUvMiR3e2oYWturSwxE7o0QheNWxYM3rUgz__G0YTGIdl-ayd-iAonwQP2a2nP2rwjBfZiafnBS3IFziMv54AOi58zIQxeuq_JyhKfPp5ooZvc0benVbsDNxQYhmAwAhU0PWiXfs62FgAgs03YRQSQSeinVnOI9F8whJUyUj_Nsprut_2-Xf5PQ.ujdYw7Oy9Qya4-UWMnq9p-IEubQ_VPhYlI8-TWO2RiU" }, { "name": "17798517295", + "baseUrl": "https://api.aicodemirror.com/api/claudecode", "api_key": "sk-ant-api03-6ITk9R4kvZZtnYB_Dt584N5HGFd8wtg5DKjn099ycTyF6RQXajAXjICLptgykGVT0XpIFeJjwg9PZq4JolVs4A", "cookie": "__Host-authjs.csrf-token=da5c90449ce978340397cb2eb872ae4d3c3887f07175e02a4e4c2c37c9c63620%7Cb935baa107158404f3aac17988113b2364e88a29b0909a57cb10dbb0fa980a6a; __Secure-authjs.callback-url=https%3A%2F%2Fwww.aicodemirror.com%2Flogin; acw_tc=b65cfd3317618260638344619e75228e781b089b1266501660d3933209dcf2; __Secure-authjs.session-token=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwia2lkIjoidHJpaENuTkRQc3JoMDh6ZURKQ1FjVzRRTFFtanhuaGhyZGFMRGIyT05EbDR6enlGTERJcGgyZVE3dGRvc295dzRIYzA2emI2QWVxVmVTYUpxX0ZmaFEifQ..n9LhECwXn66y4f4cGDqYew.p6EP9g5rNvkvnnIkAIPmdR_BU_-AUsTPbngXRO_Cs7Y8rZaaetIi1WGPG48_ke-KVtrGphMVc0HOqjjNcO6d9kPyPG7pIqTdCOgKqY98l1Jz0gNyGvvIw2xIBodHMZkTElHF-24hpCb2ra6KgLLvMTmZTW_myWGrIxiMF5wQS3ivm7W2KDhU0dTKck6XlzVUqy8DGuLXcLsZyakUJ8WPzlCOlVCiWsPHAXzyKAH7CmtDsTXNQTZbVAVURXHh_aFHnj0CuZ07ZQrOI5bml0KbXTg7C9bDczJyIe-CEIizs4jyeIk_tHwH190tjxnWYUxCNW4AyptHqJxobWkbY7iXoCr33Pa_hfsa--jVwBakjzGuC_QIt6bUzAuQ3UU8L3AScNPeZCAzwOwdkrhIDMx-l31N_QthV_76O9pyijOeS0aRpqlrbRgeYX7Hoag4U_BHIPx3yQKQOKjFi1UGUBmbEfXm4x-l_VEV4TBg1c0qwzXLH82MY275QrJY6xZvavrAibbSzWHifHP3PsD8jiFc5w.Nf7fookSbiXSt3hv1a8z5LwP_qC_fYmV3FLumtSRUrc" + }, + { + "name": "V2EX", + "baseUrl": "https://claude-code.tsukasa.dpdns.org:8443/api", + "auth_token": "cr_b47b812b12f29e5b5ae2ab428c624dfbc0d5086eeedc0f3ad54e1045a9e862e8" } ] }