跳转到内容

cnb-rs auth status

cnb-rs auth status [flags]

显示当前域名下所有已知账号的认证状态。输出风格参考 gh auth status:domain 粗体顶层,下面缩进列出每个 entry(环境变量 + 已保存的多个账号),每个 entry 用 ✓ / ✗ 图标标记是否通过 GET /user 校验,并显示 Token、登录方式、过期时间等。

任一账号校验失败 → 命令以 exit 1 退出,可作为 CI 健康检查使用。

TIP

Token 脱敏规则:长度大于 12 时保留前 4 位和后 4 位(如 cnb_****nQRo),中间用 **** 替代;使用 -t / --show-token 可显示完整 Token。

TIP

颜色输出仅在 stderr 是 TTY 时启用;重定向到文件或管道时输出纯文本,不包含 ANSI 转义。

选项

  • -t, --show-token: 显示完整 token(默认掩码)
  • -a, --active: 只显示当前 active 账号

继承的全局选项:

  • --domain <DOMAIN>: 检查指定域名的认证状态(默认:cnb.cool

Token 来源优先级

cnb-rs 按以下顺序查找并展示 Token:

  1. 域名特定环境变量CNB_TOKEN_{DOMAIN}(域名去掉 .-,如 CNB_TOKEN_cnbcool
  2. 通用环境变量CNB_TOKEN
  3. keyring — 当前 domain 下已保存账号,可能是 OAuth blob 或 PAT 裸字符串
  4. 配置文件~/.cnb/config.toml 中以明文存储的 PAT

环境变量存在时,会作为单独的 entry 显示在最上方(标记 "由环境变量提供"),并在被覆盖的 stored 账号末尾追加 ! 该账号的 token 已被环境变量覆盖 提示。

详见 cnb-rs auth — 环境变量

登录方式识别

auth status 通过解析 keyring secret 自动识别每个账号的登录模式:

  • PAT:keyring 存的是裸 Token 字符串,仅显示 登录方式: PAT
  • OAuth (可静默刷新):keyring 存的是 OAuthSecretBlob JSON 且含 refresh_token,额外显示 Token 过期: YYYY-MM-DD HH:MM:SS (Xd Yh 后)
  • OAuth (无 refresh_token):JSON 中缺 refresh_token,提示需要重新登录续期

示例

bash
# 已登录状态(OAuth)
$ cnb-rs auth status
cnb.cool
 已登录到 cnb.cool,账号 octocat (keyring)
  - Active account: true
  - Token: cnb_****nQRo
  - 登录方式: OAuth (可静默刷新)
  - Token 过期: 2026-05-23 10:00:00 (5d 12h)

# 多账号(OAuth + PAT)
$ cnb-rs auth status
cnb.cool
 已登录到 cnb.cool,账号 alice (keyring)
  - Active account: true
  - Token: cnb_****abcd
  - 登录方式: OAuth (可静默刷新)
  - Token 过期: 2026-05-23 10:00:00 (5d 12h)

 已登录到 cnb.cool,账号 bob (config file)
  - Active account: false
  - Token: cnb_****xyz1
  - 登录方式: PAT

# 使用环境变量认证
$ CNB_TOKEN=cnb_xxxxxxxxxxxx cnb-rs auth status
cnb.cool
 使用环境变量 CNB_TOKEN 登录到 cnb.cool,账号 octocat
  - Active account: true (由环境变量提供)
  - Token: cnb_****xxxx

# 环境变量 + 已保存账号同时存在
$ CNB_TOKEN=cnb_xxxx cnb-rs auth status
cnb.cool
 使用环境变量 CNB_TOKEN 登录到 cnb.cool,账号 octocat
  - Active account: true (由环境变量提供)
  - Token: cnb_****xxxx

 已登录到 cnb.cool,账号 octocat (keyring)
  - Active account: true
  - Token: cnb_****abcd
  - 登录方式: OAuth (可静默刷新)
  - Token 过期: 2026-05-23 10:00:00 (5d 12h)
  ! 该账号的 token 已被环境变量覆盖

# Token 无效(exit 1)
$ cnb-rs auth status
cnb.cool
 无法登录到 cnb.cool 账号 octocat (keyring)
  - Active account: true
  - 错误: HTTP 401 Unauthorized
  - Token: cnb_****xxxx
  - 重新登录: cnb-rs auth login
  - 删除该账号: cnb-rs auth logout
错误: 一个或多个账号认证失败

# keyring 不可用(exit 1)
$ cnb-rs auth status
cnb.cool
 无法读取 cnb.cool 账号 octocat (keyring)
  - Active account: true
  - 错误: 访问 keyring 超时
  - 重新登录: cnb-rs auth login
  - 删除该账号: cnb-rs auth logout
错误: 一个或多个账号认证失败

# 只看 active 账号
$ cnb-rs auth status -a
cnb.cool
 已登录到 cnb.cool,账号 octocat (keyring)
  - Active account: true
  - Token: cnb_****nQRo
  - 登录方式: OAuth (可静默刷新)
  - Token 过期: 2026-05-23 10:00:00 (5d 12h)

# 显示完整 Token
$ cnb-rs auth status -t
cnb.cool
 已登录到 cnb.cool,账号 octocat (keyring)
  - Active account: true
  - Token: cnb_at_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  - 登录方式: OAuth (可静默刷新)
  - Token 过期: 2026-05-23 10:00:00 (5d 12h)

# 未登录
$ cnb-rs auth status
未登录到任何 CNB 域名 (cnb.cool)。
运行 `cnb-rs auth login` 登录,或设置环境变量 CNB_TOKEN。

# 检查指定域名
$ cnb-rs --domain example.com auth status
未登录到任何 CNB 域名 (example.com)。
运行 `cnb-rs auth login` 登录,或设置环境变量 CNB_TOKEN。

退出码

情况退出码
全部账号校验成功0
任一账号校验失败/不可读1
未登录到任何 CNB 域名0

API

步骤API方法说明
校验账号${CNB_API_ENDPOINT}/userGET验证 Token 并获取用户名

每个 entry 独立调用 /user:环境变量来源单独校验一次,stored 账号逐个校验。API 详情同 cnb-rs auth login — API 章节。

另请参阅

Released under the MIT License.