75 lines
1.6 KiB
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)
|
|
}
|