🎨双token校验
This commit is contained in:
parent
fb97082c0c
commit
d74d7c579f
@ -15,7 +15,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// jwt密钥
|
// jwt密钥
|
||||||
const secret = "JQo7L1RYa8ArFWuj0wC9PyM3VzmDIfXZ2d5tsTOBhNgviE64bnKqGpSckxUlHey6"
|
//const secret = "JQo7L1RYa8ArFWuj0wC9PyM3VzmDIfXZ2d5tsTOBhNgviE64bnKqGpSckxUlHey6"
|
||||||
|
|
||||||
type JwtComponent struct {
|
type JwtComponent struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
@ -33,10 +33,11 @@ func JWT() JwtComponent {
|
|||||||
// @description: 生成token
|
// @description: 生成token
|
||||||
// @receiver JwtComponent
|
// @receiver JwtComponent
|
||||||
// @param userId
|
// @param userId
|
||||||
|
// @param password
|
||||||
// @return token
|
// @return token
|
||||||
// @return expireTime
|
// @return expireTime
|
||||||
// @return err
|
// @return err
|
||||||
func (JwtComponent) GenerateToken(userId string) (token string, expireTime *jwt.NumericDate, err error) {
|
func (JwtComponent) GenerateToken(userId, secret string) (token string, expireTime *jwt.NumericDate, err error) {
|
||||||
timeNow := time.Now().Local()
|
timeNow := time.Now().Local()
|
||||||
expireTime = jwt.NewNumericDate(timeNow.Add(7 * time.Hour))
|
expireTime = jwt.NewNumericDate(timeNow.Add(7 * time.Hour))
|
||||||
notBefore := jwt.NewNumericDate(timeNow)
|
notBefore := jwt.NewNumericDate(timeNow)
|
||||||
@ -70,7 +71,7 @@ func (JwtComponent) GenerateToken(userId string) (token string, expireTime *jwt.
|
|||||||
// @param token
|
// @param token
|
||||||
// @return *JwtComponent
|
// @return *JwtComponent
|
||||||
// @return error
|
// @return error
|
||||||
func (JwtComponent) ParseToken(token string) (*JwtComponent, error) {
|
func (JwtComponent) ParseToken(token, secret string) (*JwtComponent, error) {
|
||||||
tokenStr := strings.Split(token, "Bearer ")[1]
|
tokenStr := strings.Split(token, "Bearer ")[1]
|
||||||
|
|
||||||
t, err := jwt.ParseWithClaims(tokenStr, &JwtComponent{}, func(token *jwt.Token) (any, error) {
|
t, err := jwt.ParseWithClaims(tokenStr, &JwtComponent{}, func(token *jwt.Token) (any, error) {
|
||||||
|
@ -72,13 +72,14 @@ func (LoginApi) Login(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 生成token
|
// 生成token
|
||||||
token, expireAt, err := component.JWT().GenerateToken(user.Id)
|
token, expireAt, err := component.JWT().GenerateToken(user.Id, utils.Hash().SHA256(p.Password))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("用户[%s]生成token失败: %v", user.Account, err.Error())
|
log.Errorf("用户[%s]生成token失败: %v", user.Account, err.Error())
|
||||||
response.R(c).FailedWithError("登陆失败!")
|
response.R(c).FailedWithError("登陆失败!")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c.Writer.Header().Set("X-TOKEN", utils.Hash().SHA256(p.Password))
|
||||||
response.R(c).OkWithData(map[string]any{
|
response.R(c).OkWithData(map[string]any{
|
||||||
"token": token,
|
"token": token,
|
||||||
"type": "Bearer",
|
"type": "Bearer",
|
||||||
|
@ -22,7 +22,14 @@ func Authorization() gin.HandlerFunc {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
userClaims, err := component.JWT().ParseToken(token)
|
hashPassword := c.Request.Header.Get("X-TOKEN")
|
||||||
|
if hashPassword == "" {
|
||||||
|
response.R(c).AuthorizationFailed("未登陆")
|
||||||
|
c.Abort()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
userClaims, err := component.JWT().ParseToken(token, hashPassword)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.R(c).AuthorizationFailed("未登陆")
|
response.R(c).AuthorizationFailed("未登陆")
|
||||||
c.Abort()
|
c.Abort()
|
||||||
|
44
utils/hash.go
Normal file
44
utils/hash.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/md5"
|
||||||
|
"crypto/sha256"
|
||||||
|
"crypto/sha512"
|
||||||
|
"encoding/hex"
|
||||||
|
)
|
||||||
|
|
||||||
|
type hash struct{}
|
||||||
|
|
||||||
|
func Hash() hash {
|
||||||
|
return hash{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MD5
|
||||||
|
// @description: MD5摘要
|
||||||
|
// @param str
|
||||||
|
// @return string
|
||||||
|
func (hash) MD5(str string) string {
|
||||||
|
hs := md5.New()
|
||||||
|
hs.Write([]byte(str))
|
||||||
|
return hex.EncodeToString(hs.Sum(nil))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SHA256
|
||||||
|
// @description: SHA256
|
||||||
|
// @param str
|
||||||
|
// @return string
|
||||||
|
func (hash) SHA256(str string) string {
|
||||||
|
hasher := sha256.New()
|
||||||
|
hasher.Write([]byte(str))
|
||||||
|
return hex.EncodeToString(hasher.Sum(nil))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SHA512
|
||||||
|
// @description: SHA512
|
||||||
|
// @param str
|
||||||
|
// @return string
|
||||||
|
func (hash) SHA512(str string) string {
|
||||||
|
hasher := sha512.New()
|
||||||
|
hasher.Write([]byte(str))
|
||||||
|
return hex.EncodeToString(hasher.Sum(nil))
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user