65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
|
|
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()
|
|||
|
|
}
|
|||
|
|
}
|