跳到主要内容
这一页是 Agent 原文

本页由 skills/fnos-cli/reference/user.md 自动同步,写给 Agent 的措辞一字未改。第一次上手建议先读5 分钟上手、命令速查表。

用户与认证参考

OAuth 登录​

fnos-cli 使用 OAuth 2.0 Authorization Code + PKCE 建立代理 session,不使用 NAS 用户名密码、 2FA 登录或旧 token 恢复链。CLI 按用户、文件读写、下载、应用中心、相册、系统、日志、存储和 Docker 模块申请 trim.* scope;完整列表见 oauth.md。

Agent 使用两段式授权,详细边界和故障处理见 oauth.md:

fnos-cli --profile home --host <host> --port <port> login --authorize-only
fnos-cli --profile home --host <host> --port <port> login --code '<code>'

Agent 先把 CLI 返回的链接发给用户,用户自行在浏览器登录、授权并把一次性 code 发回 Agent, Agent 再执行第二条命令;两步使用同一执行环境、profile 和连接参数。用户无需打开终端。 不要代填账号密码、点击授权或读取页面 code;只接收用户主动提供的 code,不额外回显或记录。 授权 URL 不包含 redirect_uri,不要自行追加;token 交换成功并保存后清理一次性 pending。

Session 保存以下认证信息:

字段含义
accessToken代理业务请求的 Bearer token
refreshTokenaccess token 刷新凭据
accessTokenExpiresAtaccess token 的 Unix 秒过期时间
oauthClientIdCLI 使用的 OAuth client id
oauthDeviceId本机持久化的 OAuth device id
oauthScope已授权 scope

普通已认证命令会在 access token 临近过期时自动调用 refresh。也可以显式执行:

fnos-cli --profile home login --refresh

refresh 响应没有返回新 refresh token 时,CLI 保留已有 refresh token。刷新前会先确认当前 profile 的 session 存储可写;预检失败时停止当前命令,不发送 refresh,也不静默切换到用户名 密码登录。多个进程同时恢复时,CLI 会复用已写入的新 session,不覆盖较新的 token。

logout 只清除当前 profile 的本地 session,不表示服务端 token 已撤销:

fnos-cli --profile home logout

当前用户与列表​

fnos-cli user info
fnos-cli user list
fnos-cli user list --mode group --group Users
fnos-cli user request user.list --json '{"limit":100,"offset":0}' --yes
命令端点重要输出
user infouser.infouserInfo.user、uid、admin
user listuser.list用户数组、总数和分页字段
user list --mode groupuser.listUG指定组中的用户

user request 的 endpoint 必须以 user. 开头;--json 必须是 JSON object,且不能手工提供 req 或 reqid。通用 user request 无法从 endpoint 名称可靠判断读写属性,因此默认要求确认; 自动化时需明确传 --yes。已封装的 user info、user list 等专用只读命令不需要该参数。

用户写操作​

fnos-cli user add <user> [--password <initial-password>] [--groups Users] [--set-admin] --yes
fnos-cli user mod <user> [--new-name <name>] [--password <new-password>] [--groups Users] --yes
fnos-cli user del <user> --yes
fnos-cli user change-password <user> --yes
fnos-cli user unfreeze <user> --yes
fnos-cli user set-admin <user> --admin true --yes
命令端点主要请求字段
user adduser.adduser、password、groups、可选联系信息和管理员标记
user moduser.moduser 加显式提供的变更字段
user deluser.deluser
user change-passworduser.changePassworduser、交互输入的新密码
user unfreezeuser.unfreezeuser
user set-adminuser.setAdminuser、admin

这里的 --password 是创建用户或修改目标用户密码,不是 CLI 登录凭据。不要把用户管理密码 改写成登录参数。密码不要出现在回复、日志或长期保存的命令记录中;省略可交互输入的密码参数。

删除用户、修改管理员权限、改密码和解冻属于写操作,未得到用户明确授权时不要执行。

用户组​

fnos-cli user group list
fnos-cli user group info <group>
fnos-cli user group users <group>
fnos-cli user group add <group> [--comment <text>] --yes
fnos-cli user group mod <group> [--new-name <name>] [--comment <text>] --yes
fnos-cli user group del <group> --yes
fnos-cli user group set-users <group> --users <user> --yes
fnos-cli user group add-users <group> --users <user> --yes
fnos-cli user group del-users <group> --users <user> --yes
命令端点主要请求字段
group listuser.groupList无
group infouser.groupInfogroup
group usersuser.groupUsersgroup
group adduser.groupAddgroup、可选 comment
group moduser.groupModgroup、可选新名称和备注
group deluser.groupDelgroup
group set-usersuser.groupSetUsersgroup、users
group add-usersuser.groupAddUsersgroup、users
group del-usersuser.groupDelUsersgroup、users

--users 和 --groups 支持重复参数或逗号分隔值。空列表、控制字符和明显非法名称会在发请求 前被拒绝。

登录设备​

fnos-cli user login-devices
fnos-cli user request user.listLoginDevice --yes

登录设备列表是用户管理数据,不参与 CLI 的 OAuth PKCE 登录。不要根据设备列表尝试旧的 trusted-device/2FA 登录流程。

错误处理​

  • saved proxy session is required:先完成 OAuth 登录。
  • OAuth pending 缺失或过期:按 oauth.md 重新执行 login --authorize-only,等待用户回传新 code 后再交换,不重试旧 code。
  • refresh 失败或 refresh token 缺失:重新运行 OAuth 登录,不回退到账号密码。
  • refresh 返回后 session 最终写入失败:不要盲目复用旧 refresh token;它可能已被轮换,应重新登录。
  • 权限错误:先用 user info 确认 admin,不要自动提升权限。
  • 写操作未确认:向用户说明目标和影响,得到授权后再传 --yes。
  • 响应含业务错误码时原样报告错误语义,不要只依据 HTTP 状态判断成功。

自动同步自 skills/fnos-cli/reference/user.md(fnos-cli 0.5.1)。请勿直接编辑本页,修改请提交到上游仓库 fnnas-labs/fnos-cli-skill。