go语言用cookie实现登录(gin+gorm)
第一步数据库验证表单提交的用户名和密码是否正确
//获取表单提交的数据进行登录
name := c.PostForm("name")
password := c.PostForm("password")
//每个人的验证都基本不同,代码就省略了
//将获得的数据进行数据库验证,如果验证成功,则进行第二步在验证成功的地方设置cookie
//下方代码为我验证成功的地方,设置cookie
if admin.Password == password {
c.SetCookie("abc", 123, 3600, "/", "localhost", false, true)
// 返回信息登录成功
c.String(http.StatusOK, "Login success!")
}
第二步设置cookie
// 给客户端设置cookie
// maxAge int, 单位为秒
// path,cookie所在目录
// domain string,域名
// secure 是否智能通过https访问
// httpOnly bool 是否允许别人通过js获取自己的cookie
c.SetCookie("abc", "123", 3600, "/", "localhost", false, true)
参数中第一个和第二个可以自己定义(“abc”, 123)
第三步设置中间件
func AuthMiddleWare() gin.HandlerFunc {
return func(c *gin.Context) {
// 获取客户端cookie并校验
if cookie, err := c.Cookie("abc"); err == nil {
if cookie == "123" {
c.Next()
return
}
}
// 返回错误
c.JSON(http.StatusUnauthorized, gin.H{"error": "err"})
// 若验证不通过,不再调用后续的函数处理
c.Abort()
return
}
}
注意:abc 和123 要与setCookie中的值对应
第四步使用中间件
//创建路由
studentGroup := r.Group("/student")
{
//学生登录
studentGroup.POST("/login", register_login.StudentLogin)
//调用中间件
studentGroup.Use(controller.AuthMiddleWare())
//获取个人信息
studentGroup.GET("/student1/:stu/:sno", controller.GetStudent)
//更新自己局部信息
studentGroup.PUT("/student2/:stu/:sno", controller.UpdateStudent)
//获取分数
studentGroup.GET("/student3/:stu", controller.GetScore)
}
上面是我创建的学生路由组
- 通过这个实现登录
studentGroup.POST("/login", register_login.StudentLogin) - 使用中间件
studentGroup.Use(controller.AuthMiddleWare()) - 登录成功后网页里就保存了cookie
- 就可以进行下面的操作
//获取个人信息
studentGroup.GET("/student1/:stu/:sno", controller.GetStudent)
//更新自己局部信息
studentGroup.PUT("/student2/:stu/:sno", controller.UpdateStudent)
//获取分数
studentGroup.GET("/student3/:stu", controller.GetScore)