Spaces:
Sleeping
Sleeping
| package api | |
| import ( | |
| "log" | |
| "sublink/middlewares" | |
| "sublink/models" | |
| "sublink/utils" | |
| "time" | |
| "github.com/dgrijalva/jwt-go" | |
| "github.com/gin-gonic/gin" | |
| ) | |
| // 获取token | |
| func GetToken(username string) (string, error) { | |
| c := &middlewares.JwtClaims{ | |
| Username: username, | |
| StandardClaims: jwt.StandardClaims{ | |
| ExpiresAt: time.Now().Add(time.Hour * 24 * 14).Unix(), // 设置14天过期 | |
| IssuedAt: time.Now().Unix(), // 签发时间 | |
| Subject: username, // 用户 | |
| }, | |
| } | |
| token := jwt.NewWithClaims(jwt.SigningMethodHS256, c) | |
| return token.SignedString(middlewares.Secret) | |
| } | |
| // 获取captcha图形验证码 | |
| func GetCaptcha(c *gin.Context) { | |
| id, bs4, _, err := utils.GetCaptcha() | |
| if err != nil { | |
| log.Println("获取验证码失败") | |
| c.JSON(400, gin.H{ | |
| "msg": "获取验证码失败", | |
| }) | |
| return | |
| } | |
| c.JSON(200, gin.H{ | |
| "code": "00000", | |
| "data": gin.H{ | |
| "captchaKey": id, | |
| "captchaBase64": bs4, | |
| }, | |
| "msg": "获取验证码成功", | |
| }) | |
| } | |
| // 用户登录 | |
| func UserLogin(c *gin.Context) { | |
| username := c.PostForm("username") | |
| password := c.PostForm("password") | |
| captchaCode := c.PostForm("captchaCode") | |
| captchaKey := c.PostForm("captchaKey") | |
| // 验证验证码 | |
| if !utils.VerifyCaptcha(captchaKey, captchaCode) { | |
| log.Println("验证码错误") | |
| c.JSON(400, gin.H{ | |
| "msg": "验证码错误", | |
| }) | |
| return | |
| } | |
| user := &models.User{Username: username, Password: password} | |
| err := user.Verify() | |
| if err != nil { | |
| log.Println("账号或者密码错误") | |
| c.JSON(400, gin.H{ | |
| "msg": "账号或者密码错误", | |
| }) | |
| return | |
| } | |
| // 生成token | |
| token, err := GetToken(username) | |
| if err != nil { | |
| log.Println("获取token失败") | |
| c.JSON(400, gin.H{ | |
| "msg": "获取token失败", | |
| }) | |
| return | |
| } | |
| // 登录成功返回token | |
| c.JSON(200, gin.H{ | |
| "code": "00000", | |
| "data": gin.H{ | |
| "accessToken": token, | |
| "tokenType": "Bearer", | |
| "refreshToken": nil, | |
| "expires": nil, | |
| }, | |
| "msg": "登录成功", | |
| }) | |
| } | |
| func UserOut(c *gin.Context) { | |
| // 拿到jwt中的username | |
| if _, Is := c.Get("username"); Is { | |
| c.JSON(200, gin.H{ | |
| "code": "00000", | |
| "msg": "退出成功", | |
| }) | |
| } | |
| } | |