token/handler/user-handler.go

75 lines
1.6 KiB
Go

package handler
import (
"strconv"
"time"
"github.com/dgrijalva/jwt-go"
"github.com/gin-gonic/gin"
log "github.com/sirupsen/logrus"
"gorm.io/gorm"
"myschools.me/wyh/token.git/config"
"myschools.me/wyh/token.git/model"
"myschools.me/wyh/token.git/mysql"
)
// 获取当前用户
func userCurrent(c *gin.Context) *model.UserClaims {
obj, ok := c.Get("user")
if !ok {
return nil
}
return obj.(*model.UserClaims)
}
func UserToken(c *gin.Context) {
up := &model.User{}
if err := c.ShouldBind(up); err != nil {
log.WithFields(log.Fields{
"func": "UserToken",
}).Warnf("%s", err)
}
db := mysql.New()
var result = &model.User{}
if err := db.Where("uname=? and password=?", up.Uname, up.Password).First(result).Error; err != nil {
if err != gorm.ErrRecordNotFound {
log.WithFields(log.Fields{
"func": "UserToken",
}).Warnf("%s", err)
}
}
if result.Uid == 0 {
c.AbortWithStatusJSON(400, gin.H{
"code": 1,
"msg": "用户账号密码错误",
"data": "",
})
return
}
expire := 300
var claims = &model.UserClaims{
StandardClaims: jwt.StandardClaims{
ExpiresAt: time.Now().Add(time.Second * time.Duration(expire)).Unix(),
Id: strconv.Itoa(result.Uid),
},
User: *up,
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
tokenString, err := token.SignedString([]byte(config.JwtKey))
if err != nil {
log.WithFields(log.Fields{
"func": "UserToken",
}).Warnf("%s", err)
}
c.JSON(200, gin.H{
"token": tokenString,
"expire": expire,
})
}
func UserDetail(c *gin.Context) {
usr := userCurrent(c)
c.JSON(200, usr)
}