当前位置: 首页 > news >正文

兼职网站制作如何做自己的网站

兼职网站制作,如何做自己的网站,网站优化需要什么软件,丽水市企业网站建设 微信营销 影视拍摄前面我们分享了 go-zero 的快速实战以及日志组件的剖析,本次我们来实战使用 go-zero jwt 鉴权 本次文章主要是分享关于 go-zero 中 jwt 的使用方式,会以一个 demo 的方式来进行实战,对于使用 goctl 工具以及安装细节就不在赘述,有…

前面我们分享了 go-zero 的快速实战以及日志组件的剖析,本次我们来实战使用 go-zero jwt 鉴权

本次文章主要是分享关于 go-zero 中 jwt 的使用方式,会以一个 demo 的方式来进行实战,对于使用 goctl 工具以及安装细节就不在赘述,有需要的话可以查看:

  • 官网

本次文章主要分为如下几个部分:

  • Jwt 的简单介绍
  • Go-zero 中使用 jwt 实战

Jwt 的简单介绍

关于 jwt 鉴权的细节和原理,感兴趣的朋友可以查看历史文章:JWT身份认证(附带源码讲解) | GO主题月

那么我们如何识别什么时候需要使用 jwt 呢?

  • 用于授权

例如某个系统通过例如账号密码登录之后,后台会生成一个 jwt,这个用户在这个系统之后的任何操作,都会去校验这个 jwt,就不需要用户操作系统内其他模块的时候,还去进行一次登录

当然,这是需要我们做好设定,这个 jwt 针对哪一些路由可以使用,从而允许用户访问该令牌允许的路由,服务和资源

  • 用于信息交换

因为 jwt 可以与各方进行安全的传输,内部使用了签名算法,公钥加密,私钥解密,而且 jwt 的数据各种中有标头,有效载荷,以及其他的签发时间,过期时间,颁发人等等,可以用来校验信息是否被篡改了

Go-zero 中使用 jwt 实战

话不多说,咱们就来开始实战吧,先来给自己提一个需求:

需求

  • 同学们平时去图书馆,都是需要登录自己的账号,才可以进入系统查询书籍余量的
  • 那么我们就来实现一下,用账号密码登录图书系统,并生成一个 jwt,后续该用户进行书籍查询的时候,就可以直接使用 jwt 来进行鉴权

分析

那么,根据上述需求,显然,咱们会使用到数据库,本次这里咱们仍然使用 mysql 进行演示,并且会涉及到用户表和图书表

我们可以现在创建一下这两张表

  • user table

user.sql

CREATE TABLE `user`
(`stu_id` varchar(255) NOT NULL COMMENT 'stu_id',`name` varchar(255) NOT NULL COMMENT 'name',`password` varchar(255) NOT NULL COMMENT 'password',`gender` varchar(255) NOT NULL COMMENT 'gender',PRIMARY KEY(`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
stu_id学号
name姓名
password密码
gender性别
  • book table

book.sql

CREATE TABLE `book`
(`book_id` varchar(255) NOT NULL COMMENT 'stu_id',`name` varchar(255) NOT NULL COMMENT 'name',`count` INTEGER (255) NOT NULL COMMENT 'password',PRIMARY KEY(`book_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
book_id图书 id
name图书名称
count图书剩余数量

咱们可以向表中插入一些 demo 数据,便于后续使用

insert into book(book_id,name,count)values("000001","kubernetes in action",99);
insert into book(book_id,name,count)values("000002","effective go",88);
insert into book(book_id,name,count)values("000003","穷爸爸富爸爸",21);insert into user(stu_id,name,password,gender)values("13141549", "小胖", "Aa123123", "男");
insert into user(stu_id,name,password,gender)values("15161766", "阿强", "6r*,oo", "男");
insert into user(stu_id,name,password,gender)values("1325590", "marry", "123456", "女");

开始实战 go-zero 的 jwt

先来看看基本的代码目录

  1. 新建代码目录,并编写 book 和 user 的 api

新建目录

mkdir my_test_demo/my_book_sys/book/api -p
mkdir my_test_demo/my_book_sys/book/model -p
mkdir my_test_demo/my_book_sys/user/api -p
mkdir my_test_demo/my_book_sys/user/rpc -p
mkdir my_test_demo/my_book_sys/user/model -p
cd my_test_demo
go mod init my_test_demo
go mod tidy

编写 api 文件 并生成 go 代码

book.api

定义 book api

  • GET /search/do 查询书籍接口,使用 jwt: Auth 进行标识

    • 通过请求书名,鉴权完毕之后,响应响应书名对应的剩余数量

user.api

定义 user api

  • 定义 POST /user/login 接口

    • 通过账号密码请求接口,内部校验完毕之后,返回 jwt token

\

使用工具将上述 api 生成 go 对应的代码

cd my_test_demo/my_book_sys/book/api
vim book.api
goctl api go -api book.api  -dir .cd my_test_demo/my_book_sys/user/api
vim user.api
goctl api go -api user.api  -dir .
  1. 编写数据库的 sql 语句,使用 goctl 生成 go 代码
  • 直接将上述的 ****book.sql 拷贝到 my_test_demo/my_book_sys/book/model
  • user.sql 拷贝到 ****my_test_demo/my_book_sys/user/model

生成数据库相关的 go 代码文件

cd my_test_demo/my_book_sys/book/model
goctl model mysql ddl -src book.sql -dir .cd my_test_demo/my_book_sys/user/model
goctl model mysql ddl -src user.sql -dir .

这个时候,咱们就已经完成了大部分的准备工作,接下来我们来查看一下代码目录

添加数据库配置和 jwt 相关配置

User 部分
  1. 修改 my_test_demo/my_book_sys/user/api/etc/user-api.yaml ,加上数据库配置和 Auth 配置
  • DataSource 数据库配置
  • Auth jwt 配置

    • AccessSecret jwt 需要的密钥
    • AccessExpire 过期时间,单位 秒
  1. 修改 my_test_demo/my_book_sys/user/api/internal/config/config.go 增加配置对应的数据结构

  1. 补充 svc 层的数据结构,修改 my_test_demo/my_book_sys/user/api/internal/svc/servicecontext.go ,以及补充 NewServiceContext 的实现

  1. 补充咱们的核心逻辑层的代码,my_test_demo/my_book_sys/user/api/internal/logic/loginlogic.go,大体逻辑如下
  • 校验入参,去掉输入的用户名和密码的前后空格
  • 查询数据库进行数据校验,此处我们手动在 my_test_demo/my_book_sys/user/model/usermodel_gen.go 文件中添加了数据库操作的 FindOneByName 方法
  • 校验通过之后生成 jwt token 进行响应

此处的 model 方法可以加在 my_test_demo/my_book_sys/user/model/usermodel_gen.go

Book 部分
  1. 修改 my_test_demo/my_book_sys/book/api/etc/book-api.yaml ,加上数据库配置和 Auth 配置

其中 AccessSecret 和 AccessExpire 的字段名和值保持和上述 user 路径下的内容一致

Name: search-api
Host: 0.0.0.0
Port: 9001
DataSource: root:123456@tcp(localhost:3306)/test_demo
Auth:AccessSecret: secretoooppppooooAccessExpire: 3600
  1. 同理,添加配置对应的数据结构,修改 my_test_demo/my_book_sys/book/api/internal/config/config.go
type Config struct {rest.RestConfDataSource stringAuth struct {AccessSecret stringAccessExpire int64}
}
  1. 补充 svc 层的数据结构,修改 my_test_demo/my_book_sys/book/api/internal/svc/servicecontext.go ,以及补充 NewServiceContext 的实现

  1. 补充咱们的核心逻辑层的代码,my_test_demo/my_book_sys/book/api/internal/logic/searchlogic.go,大体逻辑如下
  • 通过书名查询数据库
  • 返回具体书名的剩余数量

上述代码中 l.svcCtx.BookHttpModel.FindOneByName 是我们自定义修改了 model 下的文件内容,新增 FindOneByName 方法 ,修改 my_test_demo/my_book_sys/book/model/bookmodel_gen.go

验收成果

咱们分别进入到项目对应的 api 路径下,启动服务

终端1:

cd my_test_demo/my_book_sys/book/api
go run search.go

终端2:

cd my_test_demo/my_book_sys/user/api
go run user.go

终端3:

  1. 咱们先来请求 book 的 api,在没有登录系统的情况下来查询书籍,看看是什么样的效果
curl -i -X GET \'http://localhost:9001/search/do?name=effective%20go'

  1. 很明显,服务给我们返回了一个未授权,说明咱们的鉴权机制此处是有效果的,那么接下来登录一个用户
// post 用户登录curl -i -X POST   http://localhost:9002/user/login   -H 'Content-Type: application/json'   -d '{"username":"小胖","password":"Aa123123"
}'

可以看到是登录成功了,且服务端给我们返回了对应的 jwt token,接下来咱们执行第一步,请求查询一下数据的数量

    // get 书籍
curl -i -X GET \'http://localhost:9001/search/do?name=effective%20go'  -H 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjA5NzMwNDEsImlhdCI6MTY2MDk2OTQ0MSwic3R1SWQiOiIxMzE0MTU0OSJ9.Jae_5GPr-xuB2mfqospfisV93ReUnGTZJ87WsIQ-bhE'

很明显,此处的鉴权机制 ok,鉴权完毕之后,正确查询数据库,查询到我们期望的书籍剩余数量

兄弟们,动起手来吧,先来应用 go-zero 的 jwt ,再去看 go-zero 的实际源码细节,很快就能明白

具体的源码地址可以查看:https://github.com/qingconglaixueit/my_test_Demo

至此,本篇内容结束

感谢阅读,欢迎交流,点个赞,关注一波 再走吧

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

\

\

// get 书籍
curl -i -X GET \'http://localhost:9001/search/do?name=effective%20go'  -H 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjA5NzMwNDEsImlhdCI6MTY2MDk2OTQ0MSwic3R1SWQiOiIxMzE0MTU0OSJ9.Jae_5GPr-xuB2mfqospfisV93ReUnGTZJ87WsIQ-bhE'// post 用户登录curl -i -X POST   http://localhost:9002/user/login   -H 'Content-Type: application/json'   -d '{"username":"小胖","password":"Aa123123"
}'

可以进入地址进行体验和学习:https://xxetb.xet.tech/s/3lucCI


文章转载自:
http://dinncodrysaltery.bpmz.cn
http://dinncostiffly.bpmz.cn
http://dinnconecrotize.bpmz.cn
http://dinncoduff.bpmz.cn
http://dinncosiceliot.bpmz.cn
http://dinncoencapsidate.bpmz.cn
http://dinncosampler.bpmz.cn
http://dinncodak.bpmz.cn
http://dinncorebelliousness.bpmz.cn
http://dinncocurrish.bpmz.cn
http://dinncorecitation.bpmz.cn
http://dinncoluggie.bpmz.cn
http://dinncobetimes.bpmz.cn
http://dinncobanksman.bpmz.cn
http://dinncoottar.bpmz.cn
http://dinncoepagoge.bpmz.cn
http://dinncostirrup.bpmz.cn
http://dinncotameness.bpmz.cn
http://dinncoethionine.bpmz.cn
http://dinncounceremonious.bpmz.cn
http://dinncowinepress.bpmz.cn
http://dinncowuhu.bpmz.cn
http://dinncodementia.bpmz.cn
http://dinncopentamer.bpmz.cn
http://dinncohaemopoiesis.bpmz.cn
http://dinncoluteal.bpmz.cn
http://dinncohfs.bpmz.cn
http://dinncoratiocinate.bpmz.cn
http://dinncodeva.bpmz.cn
http://dinncoibew.bpmz.cn
http://dinncodelirium.bpmz.cn
http://dinncosubclass.bpmz.cn
http://dinncounrepair.bpmz.cn
http://dinnconecropolis.bpmz.cn
http://dinncorpg.bpmz.cn
http://dinncoinkslinging.bpmz.cn
http://dinncofishyback.bpmz.cn
http://dinncopolyzoarium.bpmz.cn
http://dinncopacifist.bpmz.cn
http://dinncotriquetral.bpmz.cn
http://dinncomartensitic.bpmz.cn
http://dinncolorn.bpmz.cn
http://dinncoplush.bpmz.cn
http://dinncoincongruously.bpmz.cn
http://dinncoreinsert.bpmz.cn
http://dinncobookbinding.bpmz.cn
http://dinncohitch.bpmz.cn
http://dinncofluorinate.bpmz.cn
http://dinncologged.bpmz.cn
http://dinncobaize.bpmz.cn
http://dinncopedagese.bpmz.cn
http://dinncodecrease.bpmz.cn
http://dinncohangover.bpmz.cn
http://dinncophotophore.bpmz.cn
http://dinncoartlessness.bpmz.cn
http://dinncoactinomyces.bpmz.cn
http://dinncosecretaire.bpmz.cn
http://dinncosunshine.bpmz.cn
http://dinncosponsion.bpmz.cn
http://dinncoultrathin.bpmz.cn
http://dinncoyouthful.bpmz.cn
http://dinncomonocline.bpmz.cn
http://dinncosaccharolytic.bpmz.cn
http://dinncokava.bpmz.cn
http://dinncoexploded.bpmz.cn
http://dinncostanding.bpmz.cn
http://dinncoidiochromatic.bpmz.cn
http://dinncocretaceous.bpmz.cn
http://dinncosweated.bpmz.cn
http://dinncohardhattism.bpmz.cn
http://dinncooxyphil.bpmz.cn
http://dinncoapiary.bpmz.cn
http://dinncodeadwork.bpmz.cn
http://dinncosixteen.bpmz.cn
http://dinncopistou.bpmz.cn
http://dinncoseiche.bpmz.cn
http://dinncointromission.bpmz.cn
http://dinncosextupole.bpmz.cn
http://dinncosarcous.bpmz.cn
http://dinncorescuee.bpmz.cn
http://dinncochino.bpmz.cn
http://dinncoinfundibular.bpmz.cn
http://dinncolusterless.bpmz.cn
http://dinncoethnic.bpmz.cn
http://dinncogofer.bpmz.cn
http://dinncoectoblast.bpmz.cn
http://dinncopleasant.bpmz.cn
http://dinncoadmiring.bpmz.cn
http://dinncoimprovisator.bpmz.cn
http://dinncoexude.bpmz.cn
http://dinncoannulation.bpmz.cn
http://dinncocanceration.bpmz.cn
http://dinncodypass.bpmz.cn
http://dinncoseaware.bpmz.cn
http://dinncofemoral.bpmz.cn
http://dinncohummel.bpmz.cn
http://dinncodravidian.bpmz.cn
http://dinncothereout.bpmz.cn
http://dinncodepressible.bpmz.cn
http://dinncostrategus.bpmz.cn
http://www.dinnco.com/news/114098.html

相关文章:

  • 网站制作论文总结百度数据研究中心官网
  • 自动成交型网站百度百科合作模式
  • 可植入代码网站开发app推广拉新接单平台
  • 网站数据泄露我们应该怎么做steam交易链接在哪里看
  • 学做网站论坛会员账户上海谷歌优化
  • 电脑做网站怎么解析域名今日实时热点新闻事件
  • 网络媒体平台宁波 seo整体优化
  • 帮别人做网站被抓360公司官网首页
  • 响应式网站是什么软件做的移动广告平台
  • 彩票网站开发 添加彩种教程营销qq官网
  • 企业建站公司案例吉林关键词优化的方法
  • 闵行区网站公司怎么做网站推广
  • 网站建设合同服务内容公司网站建设北京
  • 丹江口做网站百度爱采购官方网站
  • 国外专名做路演的网站怎么做网站免费的
  • 一般政府网站用什么做成都网站seo技巧
  • 网站直播用php怎么做的贵州百度seo整站优化
  • 遵义网站开发的公司有哪些网络营销推广的总结
  • 长春火车站咨询电话号码是多少新闻今天
  • 织梦做导航网站百度企业查询
  • 可以做没有水印的视频网站批量关键词调排名软件
  • 自己做网站赚钱案例seo霸屏软件
  • 四川做网站的公司哪家好如何建立自己的网站平台
  • 门户网站有哪些seo怎样才能优化网站
  • 长沙专门做网站公司搜索引擎网址
  • jsp建网站线上线下一体化营销
  • 现在的网站用什么程序做适合40岁女人的培训班
  • 重庆大足网站建设百度目前的推广方法
  • 很简单的做设计的网站如何做好推广工作
  • 南昌做网站公司今日新闻最新头条