后台用户登录验证功能是很多项目的必须要有的逻辑 , 也是常见的技术需求 .
要实现这个逻辑首先要有数据库表结构如下:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '',
`password` varchar(50) NOT NULL DEFAULT '',
`nickname` varchar(50) NOT NULL DEFAULT '',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`deleted_at` timestamp NULL DEFAULT NULL,
`avator` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
gin框架路由入口去获取post的数据
func LoginCheckPass(c *gin.Context) {
password := c.PostForm("password")
username := c.PostForm("username")
info, uRole, ok := CheckKefuPass(username, password)
userinfo := make(map[string]interface{})
if !ok {
c.JSON(200, gin.H{
"code": 400,
"msg": "验证失败",
})
return
}
userinfo["name"] = info.Name
userinfo["kefu_id"] = info.ID
userinfo["type"] = "kefu"
if uRole.RoleId != 0 {
userinfo["role_id"] = uRole.RoleId
} else {
userinfo["role_id"] = 2
}
userinfo["create_time"] = time.Now().Unix()
token, _ := tools.MakeToken(userinfo)
userinfo["ref_token"] = true
refToken, _ := tools.MakeToken(userinfo)
c.JSON(200, gin.H{
"code": 200,
"msg": "验证成功,正在跳转",
"result": gin.H{
"token": token,
"ref_token": refToken,
"create_time": userinfo["create_time"],
},
})
}
先忽略掉生成token部分 ,只看查询数据库用户名密码部分
func CheckKefuPass(username string, password string) (models.User, models.User_role, bool) {
info := models.FindUser(username)
var uRole models.User_role
if info.Name == "" || info.Password != tools.Md5(password) {
return info, uRole, false
}
uRole = models.FindRoleByUserId(info.ID)
return info, uRole, true
}
model里面
func FindUser(username string) User {
var user User
DB.Where("name = ?", username).First(&user)
return user
}