跳转到内容

cnb-rs auth refresh

cnb-rs auth refresh [-u <username>] [--client-id <id>]

refresh_token 静默刷新 OAuth access_token,避免完整重走设备授权流。对齐 gh auth refresh

仅对 OAuth 登录的账号有效;PAT 登录的账号没有 refresh_token,运行时会 friendly bail 让用户改用 cnb-rs auth login 重新走 OAuth。

工作流程

  1. 决定 target username:默认当前 active 账号,--user 指定其他保存账号
  2. 校验账号存在且是 OAuth 模式(不是 PAT)
  3. 从 keyring/config 读 OAuthSecretBlob 拿到 refresh_token
  4. POST {platform}/oauth2/tokengrant_type=refresh_token 换新 access_token
  5. 持久化新 blob(refresh_token 缺失时保留旧的 + warn)

选项

  • -u, --user <USERNAME>: 指定用户名(默认当前 active 账号)
  • --client-id <ID>: OAuth2 设备授权流使用的 client_id(默认 cnb_cli,可用环境变量 OAUTH2_CLIENT_ID 覆盖)

继承的全局选项:

  • --domain <DOMAIN>: 指定目标域名(默认:cnb.cool

示例

bash
# 刷新当前 active 账号
$ cnb-rs auth refresh
正在刷新 octocat token...
 已刷新 octocat token,新过期时间:2026-08-15 14:00:00 +0800

# 刷新指定账号
$ cnb-rs auth refresh --user alice

# PAT 账号无法 refresh
$ cnb-rs auth refresh --user pat_user
错误: 账号 pat_user PAT 登录,没有 refresh_token;如需轮换请用 `cnb-rs auth login` 重新走 OAuth

# 未知账号
$ cnb-rs auth refresh --user no_such_user
错误: 未找到账号 no_such_user (cnb.cool)

服务端未返回新 refresh_token 的情况

某些 OAuth 服务端按 RFC 6749 §6 只在初次签发 refresh_token,之后 refresh 时仅返回新 access_token。cnb-rs 检测到这种情况会保留旧 refresh_token 并给一条 warn:

 服务端未返回新 refresh_token,下次再刷新可能失败

后续若 refresh 真失败,重新走 auth login 即可。

另请参阅

Released under the MIT License.