ssh-manager/controller/middleware/Auth.go

65 lines
1.5 KiB
Go
Raw Normal View History

2020-11-16 16:41:02 +08:00
package middleware
import (
"github.com/gin-gonic/gin"
"ssh_manage/common"
"ssh_manage/database"
"ssh_manage/errcode"
"ssh_manage/model"
"ssh_manage/model/Apiform"
"strings"
"time"
)
func Auth() gin.HandlerFunc {
return func(c *gin.Context) {
var resp Apiform.Resp
jwt_token := c.GetHeader("Authorization")
//log.Println(jwt_token)
//log.Println(strings.HasPrefix(jwt_token, "Bearer "))
if jwt_token == "" || !strings.HasPrefix(jwt_token, "Bearer ") {
resp.Code = errcode.S_auth_fmt_err
resp.Msg = "Token不正确"
c.JSON(200, resp)
c.Abort()
return
}
jwt_token = jwt_token[7:]
claims, err := common.ParseToken(jwt_token)
if err != nil {
resp.Code = errcode.S_auth_err
resp.Msg = "Token错误请重新登录"
c.JSON(200, resp)
c.Abort()
return
}
valid := claims.Valid()
if valid != nil {
resp.Code = errcode.S_auth_err
resp.Msg = "用户登录超时,请重新登录"
c.JSON(200, resp)
c.Abort()
return
}
var userinfo model.User
db := database.Get()
defer db.Close()
userinfo.ID = claims.Userid
db.DB.Where(userinfo).First(&userinfo)
if userinfo.Phone == 0 {
resp.Code = errcode.S_auth_err
resp.Msg = "用户不存在,请重新登录"
c.JSON(200, resp)
c.Abort()
return
}
c.Set("uid", claims.Userid)
c.Set("token", "")
new_token, err := common.ReleaseToken(claims.Userid)
if time.Now().Add(24*time.Hour).Unix() > claims.ExpiresAt { //如果过期时间小于一天则更新客户端token
c.Set("token", new_token)
}
c.Next()
}
}