后台用户登录验证功能是很多项目的必须要有的逻辑 , 也是常见的技术需求 .
要实现这个逻辑首先要有数据库表结构如下:
- 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
- }