sublinker / api /auth.go
YimoEx
init
bb9df9e
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": "退出成功",
})
}
}