本文档由 AI 自动翻译。如有任何不准确之处,请参考 英文原版。
difyctl 可同时保持对多个 Dify 主机和账户的登录状态。每一对主机和账户构成一个上下文:其元数据保存在 配置目录 下的 hosts.yml 中,其 bearer token 则保存在操作系统的凭据存储中(并以密封文件作为回退方案)。
每项任务对应一条命令:
difyctl auth login登录到某个主机auth whoami打印当前登录的身份auth list列出已保存的上下文auth logout退出当前主机的登录use host/use account切换当前上下文auth devices list列出活跃会话auth devices revoke撤销你不认识的会话
登录
auth login 会运行 OAuth 2.0 设备流程:它打印一个一次性验证码和一个验证 URL,在浏览器中打开该 URL,然后等待你在浏览器中批准登录。CLI 全程不会接触你的密码。
标志
| 标志 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--host <url> | string | none | 要登录的 Dify 主机。在自部署的 Dify 上,使用 控制台 API URL,因为 difyctl 针对控制台 API 进行操作。不带协议的 URL 会自动补上 https://。在终端中可省略此标志,直接输入主机;在非交互式会话(脚本、CI、管道)中,此标志为必填。 |
--no-browser | boolean | false | 不自动打开浏览器,仅打印验证 URL。 |
--insecure | boolean | false | 允许 http:// 主机(仅限本地开发)。 |
示例
登录到你的 Dify 主机:输出
代码提示输出到 stderr,随后用一个加载动画等待浏览器端的批准:Workspace: 这一行是你的默认工作空间。
每次登录还会注册一个服务端会话,标签为 difyctl on <hostname>。运行 auth devices list 可查看你的所有会话。登录到一个已登录的主机,会刷新该上下文中存储的 token。
退出码
| 退出码 | 含义 |
|---|---|
0 | 已登录 |
1 | 网络或服务器错误 |
2 | 用法错误,例如在终端外缺少 --host,或非 https 主机未加 --insecure |
4 | 登录被拒绝(access_denied),或代码在你批准前已过期(expired_token) |
6 | 服务器没有设备流程登录端点(unsupported_endpoint) |
7 | 触发限流(HTTP 429) |
查看当前身份
auth whoami 打印当前上下文所属的身份。它读取存储的上下文,不会联系服务器,因此回答的是「当前活跃的是哪个身份」,而不是「token 是否仍然有效」。即使会话已在服务端过期,它也会以 0 退出。
标志
| 标志 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--json | boolean | false | 输出 JSON,而非纯文本行。 |
示例
输出
--json 输出是包含 id、email 和 name 的单行内容:
退出码
| 退出码 | 含义 |
|---|---|
0 | 存在活跃的上下文 |
4 | 未登录(not_logged_in) |
列出已保存的上下文
auth list 显示所有已存储的主机和账户对,并标记出当前活跃的那一对。与 auth whoami 一样,它完全在本地运行,不会联系服务器。
标志
| 标志 | 类型 | 默认值 | 说明 |
|---|---|---|---|
-o <format> | string | none | 输出格式:json、yaml 或 name。省略此标志则输出默认表格。 |
示例
输出
| 格式 | stdout 输出的内容 |
|---|---|
| 默认 | 一张上下文表格:主机、账户和活跃标记。 |
-o json、-o yaml | 一个 contexts 数组,每个条目包含 host、account、name 和 active。 |
-o name | 账户邮箱,每行一个。 |
-o json:
退出码
| 退出码 | 含义 |
|---|---|
0 | 成功,包括没有任何已存储上下文的情况 |
2 | 用法错误,例如不支持的 -o 取值 |
退出登录
auth logout 会在服务端撤销当前上下文的会话,然后从本机删除其 token 和 hosts.yml 条目。其他已保存的上下文不受影响。
本地清理始终会执行。如果服务端撤销失败,difyctl 会在 stderr 打印一条警告,并照常清除你的凭据。token 存放在操作系统钥匙串中、而退出登录时又无法读取(已锁定,或没有桌面会话)时也是如此:跳过撤销,本地清理仍会执行。
标志
无。示例
输出
退出码
| 退出码 | 含义 |
|---|---|
0 | 已退出登录 |
4 | 未登录(not_logged_in) |
切换当前主机
use host 改变后续命令针对哪个已存储的主机运行。它在本地生效:仅在你已有的登录之间重新指向当前上下文。要添加新主机,请改用 auth login --host。
标志
| 标志 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--domain <host> | string | none | 要切换到的已存储主机,写作其裸域名(dify.example.com),不带协议。在终端中可省略此标志,从已存储的主机中选取。在非交互式会话(脚本、CI、管道)中,此标志为必填。 |
示例
按域名切换到一个已存储的主机:输出
切换成功后,会确认新的当前主机:退出码
| 退出码 | 含义 |
|---|---|
0 | 已切换 |
2 | 用法错误:未知主机,或在终端外缺少 --domain |
4 | 没有已存储的登录(not_logged_in) |
切换当前账户
use account 改变当前主机上活跃的是哪个已存储账户。与 use host 一样,它在本地生效,仅在你已有的登录之间切换。
标志
| 标志 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--email <email> | string | none | 要切换到的账户。在终端中可省略此标志,从已存储的账户中选取;在非交互式会话(脚本、CI、管道)中,此标志为必填。 |
示例
在当前主机上切换到另一个账户:输出
切换成功后,会确认新的当前账户:退出码
| 退出码 | 含义 |
|---|---|
0 | 已切换 |
2 | 用法错误:未知账户,或在终端外缺少 --email |
4 | 此主机上没有已存储的登录,或所选账户没有凭据 |
列出活跃会话
difyctl on <hostname>。auth devices list 显示你账户下活跃的会话,便于你发现并 撤销 那些你不认识的会话。
标志
| 标志 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--json | boolean | false | 输出 JSON,而非表格。 |
--page <n> | integer | 1 | 页码。 |
--limit <n> | integer | 20 | 每页条数,范围 1 到 200。此标志优先,其次是 DIFY_LIMIT。 |
示例
列出你账户下活跃的会话:输出
* 标记你当前登录所使用的会话。如果某会话自登录以来一直未被使用,则 LAST USED 为空。
--json 打印单行 JSON:一个 data 数组,每个会话对应一个条目,外加分页字段 page、limit、total 和 has_more。每个条目包含 id、prefix、client_id、device_label、created_at、last_used_at 和 expires_at。
退出码
| 退出码 | 含义 |
|---|---|
0 | 成功 |
1 | 网络或服务器错误 |
2 | 用法错误,例如 --limit 0 |
4 | 认证失败 |
7 | 触发限流(HTTP 429) |
撤销会话
auth devices revoke 在服务端结束会话。目标的匹配顺序为:先按标签精确匹配,再按会话 ID 精确匹配,最后按不区分大小写的标签子串匹配。如果某个目标匹配到多个会话,则会失败并列出候选项,此时可传入精确的 ID 来消除歧义。在终端中,difyctl 会先要求你确认(Revoke <N> session(s)? [y/N]);传入 -y/--yes 可跳过提示。在终端外(脚本或管道),它会直接撤销,不再提示。
如果你撤销的是当前登录所使用的会话,difyctl 还会清除该上下文的本地凭据:你在本机上将被退出登录。
参数
<target>:来自auth devices list的设备标签或会话 ID。除非传入--all,否则为必填。
标志
| 标志 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--all | boolean | false | 撤销除当前会话外的所有会话。 |
-y, --yes | boolean | false | 跳过确认提示。 |
示例
按标签撤销单个会话:输出
撤销成功后,difyctl 打印 ✓ Revoked <N> session(s)。如果某个命名目标没有匹配到任何会话,则会失败并提示 no session matches "<target>"。在没有其他会话时使用 --all,会打印 no sessions to revoke 并以 0 退出。
退出码
| 退出码 | 含义 |
|---|---|
0 | 已撤销,或在 --all 下没有可撤销的会话 |
1 | 网络或服务器错误 |
2 | 用法错误:没有目标且未加 --all、目标有歧义、没有匹配的会话,或拒绝了确认提示 |
4 | 认证失败 |
7 | 触发限流(HTTP 429) |