D46139b347d489f987f6edb76c98a3d3
Gin(八):cookie的使用

上一章节我们留下了一个小尾巴,那就是权限校验中间件并没有进行完善,那么今天就对它进行完善。

🍪 Cookies

接上回,如何来判断用户是否登录呢? cookie 就是一个很好的凭证,cookie 会保留到浏览器上,每次访问请求的时候就会携带上,后端通过对 cookie 的识别,来判断用户是否登录。

由此一来,首先我们是要在登录的时候保存 cookie 。修改 userHandlerUserLogin 代码

在判断密码正确的时候,对 cookie 进行添加。

context.SetCookie("user_cookie", string(u.Id), 1000, "/", "localhost", false, true)

这里来介绍一下这些参数,第一个参数为 cookie 名;第二个参数为 cookie 值;第三个参数为 cookie 有效时长,当 cookie 存在的时间超过设定时间时,cookie 就会失效,它就不再是我们有效的 cookie;第四个参数为 cookie 所在的目录;第五个为所在域,表示我们的 cookie 作用范围;第六个表示是否只能通过 https 访问;第七个表示 cookie 是否可以通过 js代码进行操作。

启动我们的项目,进行登录操作,F12 打开我们的控制台,选择Application ,在侧边栏找到 cookie,并且选择我们的站点,此时就可以在我们的右侧看到我们刚刚设置的 cookie 信息

查看cookie

查看cookie

并且有 Expires/Max-Age 属性,该属性表示 cookie 的过期时间,一旦超过这个时间,cookie 就会自动消失。

此时,已经表明我们的 cookie 设置成功。

🥞通过中间件获取Cookie

既然 cookie 已经获取成功,那么就该对我们新写的 Auth 中间件进行修改了。

我们首先建立一个 401.tmpl 文件,用于展示我们的权限不足时的信息。

{{template "header"}}

{{template "nav"}}

请先登录:<a href="/">首页</a>

当我们要访问需要权限的路由时,恰巧我们权限不足,就会转跳到该页面。

此时再完善我们的中间件。

```go
func Auth() gin.HandlerFunc {
return func(context *gin.Context) {
_, e := context.Request.Cookie("user_cookie")
if e == nil {
context.Next()
} else {

top Created with Sketch.