ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Open-Falcon(falcon-plus)指定用户资料更新 API 实战指南:PUT /api/v1/user/u/:uid

Open-Falcon(falcon-plus)指定用户资料更新 API 实战指南:PUT /api/v1/user/u/:uid 运维观测指标监控告警【免费下载链接】falcon-plusAn open-source and enterprise-level monitoring system.项目地址https://gitcode.com/gh_mirrors/fa/falcon-plus点击查看免费下载本指南基于 Open-Falconfalcon-plus开源监控系统的 API 文档 docs/_posts/User/2019-04-14-update-specific-user.md深入讲解如何通过PUT /api/v1/user/u/:uid接口按用户 ID 更新指定用户的姓名、邮箱、IM、电话与 QQ 等资料字段。读完本文你将掌握该接口的完整请求格式、鉴权方式、字段约束、典型返回与常见错误处理并能结合源码理解其底层实现gorm 更新逻辑、危险字符校验、会话校验中间件为二次开发或运维集成提供可靠依据。接口概述PUT /api/v1/user/u/:uid是 falcon-plus 的 API 模块modules/api提供的用户管理接口之一用于按用户 ID 精确更新某个已存在用户的资料信息。与之同属用户更新系列的其他接口包括接口用途说明PUT /api/v1/user/u/:uid按 ID 更新指定用户资料本文主角需要登录会话PUT /api/v1/user/update更新当前登录用户资料见 docs/_posts/User/2017-01-01-user_update.mdPUT /api/v1/user/cgpasswd修改当前用户密码见 docs/_posts/User/2017-01-01-user_change_password.mdPUT /api/v1/admin/change_user_profile管理员修改任意用户资料需管理员权限从源码结构看这些接口均注册于 user_routes.gou : r.Group(/api/v1/user)定义了用户相关路由其中authapi.PUT(/u/:uid, UpdateUser)见 user_routes.go即本文目标接口路由注册后挂载了utils.AuthSessionMidd会话鉴权中间件因此调用前必须先完成登录并持有有效会话。请求说明请求方法与路径方法PUT路径/api/v1/user/u/:uid路径参数uid用户 ID整数。原文档 Front Matter 中apiurl: /api/v1/user/u/:uid表明该参数为必填路径变量。会话Session要求原文档明确标注* [Session](#/authentication) Required即该接口必须携带有效登录会话。在 falcon-plus 中会话通过请求头Apitoken传递其值为 JSON 格式的{name:...,sig:...}name为用户名、sig为登录后下发的会话签名。具体校验逻辑参见 session.go 的SessionChecking函数从请求头读取Apitoken并解析出name与sig若配置了default_token且sig与之匹配直接放行用于服务端内部调用否则在uic库的user表中按name查用户再在session表中按sig uid匹配会话记录匹配成功才认证通过。认证中间件 auth_middle.go 会在校验失败时返回401 Unauthorized并中断请求。注意配置文件中的skip_auth若为true会跳过该校验仅限调试/内网环境使用生产环境应保持默认关闭。完整登录流程可参考 docs/_posts/User/2017-01-01-user_login.md。请求体Request Body原文档给出的请求体示例如下{ cnname: 翱鶚Test, email: root123cepave.com, im: 44955834958, phone: 99999999999, qq: 904394234239 }请求体字段与源码中 user_controller.go 定义的APIUserUpdateInput结构体一一对应字段JSON 键必填说明Cnnamecnname是binding:required用户中文姓名Emailemail是binding:required用户邮箱Phonephone否手机号IMim否即时通讯账号QQqq否QQ 号需要特别指出该接口不接收name与password字段。用户名与密码不属于可在此更新的资料范畴——APIUserUpdateInput中并未定义这两个字段且底层更新语句见下文只写入cnname、email、phone、im、qq五列。若需要修改密码应使用PUT /api/v1/user/cgpasswd本人或管理员的change_user_passwd接口。响应说明成功响应原文档记录的成功响应为Status: 200 {message:user info updated}该格式由 simple_reponse.go 的JSONR统一封装当以字符串形式返回且状态码为 200 时响应体被包装为{message:...}当返回错误时则为{error:...}。失败响应原文档提示错误响应可参见 docs/_posts/2017-01-01-response-status-codes.md。结合源码实现本接口可能返回的错误场景包括场景HTTP 状态码响应体 error 内容会话无效 / 未登录401会话校验相关错误由鉴权中间件拦截缺少uid路径参数400user id is missinguid不是合法整数400类型转换错误请求体 JSON 解析失败或必填字段缺失417StatusExpectationFailed字段校验错误如cnname/email缺失cnname包含危险字符400name pattern is invalid目标用户不存在400user does not exist数据库更新失败417gorm 返回的底层错误以上分支逐一对应 UpdateUser 函数 中的校验与错误处理逻辑具体可对照源码阅读。完整调用示例curl综合原文档请求格式与上述鉴权要求一个完整的调用示例如下curl -X PUT http://api_host:8080/api/v1/user/u/4 \ -H Content-Type: application/json \ -H Apitoken: {name:root,sig:427d6803b78311e68afd0242ac130006} \ -d { cnname: 翱鶚Test, email: root123cepave.com, im: 44955834958, phone: 99999999999, qq: 904394234239 }api_host:8080为 API 模块服务地址默认监听端口见 cfg.example.jsonApitoken需替换为实际登录后获得的{name:...,sig:...}:uid可先通过GET /api/v1/user/u/:uid见 docs/_posts/User/2017-01-01-user_get_info_by_id.md或用户列表接口确认目标用户 ID。源码实现深度解析处理流程该接口的核心实现为 user_controller.go 中的UpdateUser函数其处理链路如下解析路径参数通过c.Params.ByName(uid)取得uid为空则返回user id is missing并用strconv.Atoi转换为整数绑定并校验请求体c.BindJSON(inputs)解析 JSON缺失必填字段会触发binding:required校验并返回 417随后调用utils.HasDangerousCharacters(inputs.Cnname)对中文姓名做危险字符检查不合法返回 400确认目标用户存在db.Uic.Table(user).Where(id ?, uid).Scan(user)若user.ID 0返回user does not exist执行更新构造待更新字段 map 后调用 gorm 的Updateuuser : map[string]interface{}{ Cnname: inputs.Cnname, Email: inputs.Email, Phone: inputs.Phone, IM: inputs.IM, QQ: inputs.QQ, } dt : db.Uic.Model(user).Where(id ?, uid).Update(uuser)返回结果更新成功返回h.JSONR(c, user info updated)即200 {message:user info updated}。数据表与模型映射用户资料落库在uic库的user表建表脚本见 scripts/mysql/db_schema/1_uic-db-schema.sql。对应模型定义在 modules/api/app/model/uic/user.gotype User struct { ID int64 json:id Name string json:name Cnname string json:cnname Passwd string json:- Email string json:email Phone string json:phone IM string json:im gorm:column:im QQ string json:qq gorm:column:qq Role int json:role }可以看到Passwd的 JSON tag 为-不出现在 API 响应中Role字段则用于权限判断Role 2为超级管理员Role 1为管理员详见同文件的IsAdmin/IsSuperAdmin方法。本文接口只更新资料字段不改动Name、Passwd、Role。与更新当前用户及管理员更新的关系PUT /api/v1/user/u/:uidUpdateUser按 ID 更新任意用户调用者需具备有效会话。从源码看该接口并未显式校验调用者是否为管理员——其定位更偏向平台内部/受信调用方按 ID 更新配合 API 网关或上层权限控制使用PUT /api/v1/user/updateUpdateCurrentUser见 user_controller.go仅允许更新当前登录用户自身资料通过会话中的name定位用户普通用户自助改资料的推荐入口PUT /api/v1/admin/change_user_profileAdminChangeUserProfile见 user_controller.go显式校验IsAdmin()权限管理员批量维护用户资料的首选。三者共用相同的五字段更新集合与{message:...}风格响应区别仅在于按 ID / 按当前会话 / 按请求体 user_id三种定位用户的方式与权限约束。实战注意事项先查后改建议先调用GET /api/v1/user/u/:uid或用户列表接口确认uid存在避免直接触发user does not exist400必填字段不可省略cnname与email缺失时请求会被 gorm-validator 拦截并返回 417 及字段错误明细中文姓名安全校验cnname需避免包含危险字符否则返回name pattern is invalid会话有效期登录接口创建的 session 默认有效期约 30 天见 CreateUser 中的 session 创建逻辑长期运行的集成脚本需关注sig过期问题可配置default_token供服务端内部调用API 文档配套更多用户相关接口的完整请求/响应示例可参考 docs/doc/user.html用户登录、登出、鉴权等流程见 docs/_posts/2017-01-01-authentication.md。小结PUT /api/v1/user/u/:uid是 falcon-plus 用户管理中按 ID 精准更新用户资料的标准接口携带Apitoken会话、以uid定位用户、提交cnname/email/phone/im/qq五个字段即可完成更新成功返回200 {message:user info updated}。通过本文的源码级剖析你可以清楚掌握其鉴权链路、字段约束与错误语义从而在监控平台用户治理、账号信息同步等实际场景中正确使用该接口。赞分享运维观测指标监控告警【免费下载链接】falcon-plusAn open-source and enterprise-level monitoring system.项目地址https://gitcode.com/gh_mirrors/fa/falcon-plus点击查看免费下载相关推荐WebGoat 发布流程实战指南从版本号规范到 Maven 构建、Tag 推送与 GitHub Release 发布WebGoat 发布流程实战指南从版本号规范到 Maven 构建、Tag 推送与 GitHub Release 发布 导读 本文以 WebGoat 仓库根目录运维观测指标监控告警Open-Falcon falcon-plus 用户修改密码 API 实战PUT /api/v1/user/cgpasswd 原理与调用详解Open Falcon falcon plus 用户修改密码 API 实战PUT /api/v1/user/cgpasswd 原理与调用详解 导读 本文聚焦运维观测指标监控告警如何在gh-aw中配置GitHub App认证组织级安全接入方案如何在gh aw中配置GitHub App认证组织级安全接入方案 在 gh awGitHub Agentic Workflows中配置 GitHub Ap运维观测指标监控告警上一篇Nixpkgs wafHook 完全指南用 Waf 元构建系统接管 configure / build / install 三阶段下一篇Foundry cast run 历史交易重放修复解析移除区块 Gas Limit 与 Beacon Root 的重复校验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表