本文档由 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 全程不会接触你的密码。
标志
示例
登录到你的 Dify 主机:输出
代码提示输出到 stderr,随后用一个加载动画等待浏览器端的批准:Workspace: 这一行是你的默认工作空间。
每次登录还会注册一个服务端会话,标签为 difyctl on <hostname>。运行 auth devices list 可查看你的所有会话。登录到一个已登录的主机,会刷新该上下文中存储的 token。
退出码
完整的退出码方案,详见 输出格式与退出码。
查看当前身份
auth whoami 打印当前上下文所属的身份。它读取存储的上下文,不会联系服务器,因此回答的是「当前活跃的是哪个身份」,而不是「token 是否仍然有效」。即使会话已在服务端过期,它也会以 0 退出。
标志
示例
输出
--json 输出是包含 id、email 和 name 的单行内容:
退出码
列出已保存的上下文
auth list 显示所有已存储的主机和账户对,并标记出当前活跃的那一对。与 auth whoami 一样,它完全在本地运行,不会联系服务器。
标志
示例
输出
默认表格:
-o json:
退出码
退出登录
auth logout 会在服务端撤销当前上下文的会话,然后从本机删除其 token 和 hosts.yml 条目。其他已保存的上下文不受影响。
本地清理始终会执行。如果服务端撤销失败,difyctl 会在 stderr 打印一条警告,并照常清除你的凭据。
token 存放在操作系统钥匙串中、而退出登录时又无法读取(已锁定,或没有桌面会话)时也是如此:跳过撤销,本地清理仍会执行。
标志
无。示例
输出
退出码
切换当前主机
use host 改变后续命令针对哪个已存储的主机运行。它在本地生效:仅在你已有的登录之间重新指向当前上下文。要添加新主机,请改用 auth login --host。
标志
示例
按域名切换到一个已存储的主机:输出
切换成功后,会确认新的当前主机:退出码
切换当前账户
use account 改变当前主机上活跃的是哪个已存储账户。与 use host 一样,它在本地生效,仅在你已有的登录之间切换。
标志
示例
在当前主机上切换到另一个账户:输出
切换成功后,会确认新的当前账户:退出码
列出活跃会话
difyctl on <hostname>。auth devices list 显示你账户下活跃的会话,便于你发现并 撤销 那些你不认识的会话。
标志
示例
列出你账户下活跃的会话:输出
* 标记你当前登录所使用的会话。如果某会话自登录以来一直未被使用,则 LAST USED 为空。
--json 打印单行 JSON:一个 data 数组,每个会话对应一个条目,外加分页字段 page、limit、total 和 has_more。每个条目包含 id、prefix、client_id、device_label、created_at、last_used_at 和 expires_at。
退出码
撤销会话
auth devices revoke 在服务端结束会话。目标的匹配顺序为:先按标签精确匹配,再按会话 ID 精确匹配,最后按不区分大小写的标签子串匹配。如果某个目标匹配到多个会话,则会失败并列出候选项,此时可传入精确的 ID 来消除歧义。
在终端中,difyctl 会先要求你确认;传入 -y/--yes 可跳过提示。在终端外(脚本或管道),它会直接撤销,不再提示。
如果你撤销的是当前登录所使用的会话,difyctl 还会清除该上下文的本地凭据:你在本机上将被退出登录。
参数
<target>:来自auth devices list的设备标签或会话 ID。除非传入--all,否则为必填。
标志
示例
按标签撤销单个会话:输出
撤销成功后,difyctl 打印 ✓ Revoked <N> session(s)。如果某个命名目标没有匹配到任何会话,则会失败并提示 no session matches "<target>"。在没有其他会话时使用 --all,会打印 no sessions to revoke 并以 0 退出。
退出码
完整的退出码方案,详见 输出格式与退出码。