如何在go-zero中使用jwt-token鉴权实践
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章给大家分享的是有关如何在go-zero中使用jwt-token鉴权实践,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。创建项目生成
千家信息网最后更新 2026年11月02日如何在go-zero中使用jwt-token鉴权实践
本篇文章给大家分享的是有关如何在go-zero中使用jwt-token鉴权实践,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
创建项目
生成go.mod文件
以如下指令创建项目
mkdir jwttokencd jwttokengo mod init jwttoken
定义user.api
本文设计API如下 |描述|格式|方法|参数|返回|是否需要鉴权| |----|----|----|----|----|----| |用户登录|/open/authorization|post|mobile:手机号,passwd:密码,code:图片验证码|id:用户ID,token:用户token|否| |更新用户信息|/user/update|post|mobile:用户手机号|token:用户新的token|是|
根据以上描述,书写api的模板文件如下
type ( UserOptReq struct { mobile string `form:"mobile"` passwd string `form:"passwd"` code string `form:"code,optional"` } UserOptResp struct { id uint `json:"id"` token string `json:"token"` } //修改 UserUpdateReq struct { id uint `form:"id"` mobile string `form:"mobile,optional"` })service user-api { @server( handler: authorizationHandler folder: open ) post /open/authorization(UserOptReq) returns(UserOptResp) @server( handler: edituserHandler folder: user ) post /user/update(UserUpdateReq) returns(UserOptResp) }注意
一个文件里面只能有一个service
工具最后会以type里面模型为样板生成各种结构体,所以参数和结构体保持一致即可
如果我们需要分文件夹管理业务, 可以用folder属性来定义
生成代码
采用如下指令生成代码
goctl api go -api user.api -dir .
运行一下
go run open.go
测试一下
curl http://127.0.0.1:8888/open/authorization -X POST -d "mobile=15367151352&passwd=123rte&code=asasa"\"passwd\":\"testpwd\",\"code\":\"asdf\"}{"id":0,"token":""}中间件实现鉴权
在handler下新建auth.go文件,关键代码如下
//鉴权白名单,在这里面的是不需要鉴权的var whiteList []string = []string{ "/open/",}//鉴权中间件func Auth(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { w.Header().Add("X-Middleware", "auth") uri := r.RequestURI //默认不在 isInWhiteList := false //判断请求是否包含白名单中的元素 for _, v := range whiteList { if strings.Contains(uri, v) { isInWhiteList = true } } //如果爱白名单里面直接通过 if isInWhiteList { next(w, r) return } //否则获取前端header 里面的X-Token字段,这个就是token token := r.Header.Get("X-Token") //工具类见util\jwttoken.go _, err := utils.DecodeJwtToken(token) //如果有错直接返回error if err != nil { httpx.Error(w, err) return } //没报错就继续 next(w, r) }}在routers.go中添加一行代码
func RegisterHandlers(engine *rest.Server, serverCtx *svc.ServiceContext) { //添加这行代码 engine.Use(Auth) ///。。} 生成jwttoken
在logic\open\authorizationlogic.go中实现jwttoken的获取
func (l *AuthorizationLogic) Authorization(req types.UserOptReq) (*types.UserOptResp, error) { //这个是生成jwttoken的工具类 token, err := utils.EncodeJwtToken(map[string]interface{}{ "role": "kefu", "id": "10086", }) return &types.UserOptResp{ Token: token, }, err}测试
不携带token时访问
>curl http://127.0.0.1:8888/user/update -X POST -d "mobile=15367151352&id=123"鉴权失败,缺少鉴权参数
获取token
>curl http://127.0.0.1:8081/open/authorization -X POST -d "mobile=15367151352&passwd=123rte&code=asasa"{"id":1599063149,"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTkzMjIzNDksImlkIjoiMTUzNjcxNTEzNTIifQ.jcdg3c2rdigPO5ZTxcDilVGERAuMIdY9BUmMNX3ZA9c"}携带token时访问
>curl http://127.0.0.1:8888/user/update -X POST -H "X-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTkzMjIzNDksImlkIjoiMTUzNjcxNTEzNTIifQ.jcdg3c2rdigPO5ZTxcDilVGERAuMIdY9BUmMNX3ZA9c" -d "mobile=15367151352&id=123"# 请求成功{"id":123,"token":""}携带错误的token时访问
>curl http://127.0.0.1:8888/user/update -X POST -H "X-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTkzMjIzNDksImlkIjoiMTUzNjcxNTEzNTIifQ.jcdg3c2rdigPO5ZTxcDilVGERAuMIdY9BUmMNX3ZA9c0000" -d "mobile=15367151352&id=123"# 返回签名无效signature is invalid
以上就是如何在go-zero中使用jwt-token鉴权实践,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
用户
生成
代码
文件
参数
名单
工具
实践
中间件
就是
手机
手机号
指令
更多
知识
篇文章
结构
项目
测试
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网 科技
喔噻互联网科技
猪兼强互联网科技
艾特科技互联网
有木互联网科技
新浪科技互联网
米客互联网科技
广西互联网科技公司
佰商互联网科技有限公司
哈尔滨新华互联网科技
华服互联网科技官网
崇明区互联网教育科技售后服务
互联网5g黑科技有哪些
互联网媒体平台算高科技产业
银川新华互联网科技学校联系电话
中国科技创新与世界互联网大会
徐州市互联网科技有限公司
上海钢联属于互联网科技股吗
富国互联网金融科技混合基金
广州互联网高科技取餐柜
互联网科技素材视频竖屏
成都玖崟互联网科技有限公司乐商圈怎么样
北京大学互联网科技怎么样
小米互联网科技园设置
湖北码尼互联网科技有限公司电话
辽宁互联网新科技
哈尔滨屹滨互联网科技有限公司
四川互联网展示科技馆设计
互联网的黑科技实验室
知域互联网科技有限公司官网