衔接上文,继续开发。

 

现在的api是可以随意调用的,我们采用jwt-go来解决这个问题。

JWT 就是Json Web Token

一个JWT一般包含3个部分:

 

使用JWT进行身份校验

下载依赖

go get -u github.com/dgrijalva/jwtgo

 

编写JWT工具包

在pkg的util目录新建jwt.go文件,写入内容:

工具包涉及知识点都注释在代码里了。

 

编写Gin的中间件

有了jwt工具包,接下来我们编写Gin的中间件,在middleware新建jwt目录,新建jwt.go文件:

这个函数其实就是控制了gin的上下文是返回错误,还是继续执行。

 

获取Token

这里我们就需要新增一个获取Token的API,需要实现Auth模块。

实现Auth的Models模块

在models下新建auth.go文件,写入内容:

 

实现Auth的路由功能

在routers目录下,api 目录下新建 auth.go文件,内容如下:

这里需要注意 auth 类型,它把valid写在类对象后面,然后直接调用 valid.Valid(&a) 来验证。

 

然后接下来我们在routers目录下的router.go文件,修改文件内容:

新增了账户路由部分。

 

验证获取Token

GET请求 192.168.1.101:8000/api/auth?username=root&password=root

验证的过程中发现了代码的一些问题,所以我做了一些相应的修复。

最后我们得到结果如下:

 

Gin接入JWT中间件

接下来我们把JWT中间件接入到gin的流程中。

修改routers目录下的router.go文件,修改后完整内容:

 

最后我们查看一次当前的目录结构:

 

验证功能

最后我们要验证一下,我们加入的jwt校验是不是成功了。

这种情况下,我们先请求一篇文章:

GET 192.168.1.101:8000/api/v1/articles

给出反馈是:

 

然后我们加上token:

GET 192.168.1.101:8000/api/v1/articles?token=23123

 

这里说明我们需要先获取Token,然后再请求其他api。

GET 192.168.1.101:8000/api/auth?username=root&password=root

得到token:

然后我们带上token再去请求应用:

192.168.1.101:8000/api/v1/articles?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InJvb3QiLCJwYXNzd29yZCI6InJvb3QiLCJleHAiOjE1OTkyMjYyNTEsImlzcyI6ImdpbkJsb2cifQ.xj9PZjdD83PPC3ajwWcvi_omQOiIsWxLYRMq6o2ergM

最后得到结果:

到这里我们的JWT校验就算完成了。

 

【Go】gin Blog项目(四) JWT身份校验
Tagged on:     
5 1 投票
Article Rating
订阅评论
提醒

0 评论
内联反馈
查看所有评论