1. 程式人生 > 實用技巧 >[GO] GO語言gin框架實現管理員認證登陸介面

[GO] GO語言gin框架實現管理員認證登陸介面

後臺使用者登入驗證功能是很多專案的必須要有的邏輯 , 也是常見的技術需求 .

要實現這個邏輯首先要有資料庫表結構如下:

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
}