Compare commits

...

2 Commits

Author SHA1 Message Date
zhaoxiaorong
b5374b85ff fix 2025-04-09 10:56:49 +08:00
zhaoxiaorong
5172824358 fix 2025-04-09 10:34:01 +08:00
2 changed files with 34 additions and 4 deletions

View File

@@ -17,14 +17,14 @@ var (
type service struct{} type service struct{}
func (s *service) Register(cli *clientv3.Client, serviceName string, port int) error { func (s *service) Register(cli *clientv3.Client, serviceName string, port string) error {
lease := clientv3.NewLease(cli) lease := clientv3.NewLease(cli)
grantResp, err := lease.Grant(context.TODO(), 5) grantResp, err := lease.Grant(context.TODO(), 5)
if err != nil { if err != nil {
return err return err
} }
serviceAddr := utils.GetLocationIP() + ":" + utils.Int2String(port) serviceAddr := utils.GetLocationIP() + ":" + port
key := RootPrefix + serviceName + "/" + utils.Int642String(time.Now().UnixNano()) key := RootPrefix + serviceName + "/" + utils.Int642String(time.Now().UnixNano())
_, err = cli.KV.Put(context.TODO(), key, serviceAddr, clientv3.WithLease(grantResp.ID)) _, err = cli.KV.Put(context.TODO(), key, serviceAddr, clientv3.WithLease(grantResp.ID))

View File

@@ -1,14 +1,19 @@
package middleware package middleware
import ( import (
"encoding/json"
"fmt"
"log" "log"
"net/http" "net/http"
"git.apinb.com/bsm-sdk/core/cache/redis"
"git.apinb.com/bsm-sdk/core/crypto/encipher" "git.apinb.com/bsm-sdk/core/crypto/encipher"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/types"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
func JwtAuth(redisToken string) gin.HandlerFunc { func JwtAuth(redis *redis.RedisClient) gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
// 从请求头中获取 Authorization // 从请求头中获取 Authorization
authHeader := c.GetHeader("Authorization") authHeader := c.GetHeader("Authorization")
@@ -28,7 +33,9 @@ func JwtAuth(redisToken string) gin.HandlerFunc {
} }
// 从redis 获取token,判断当前redis 是否为空 // 从redis 获取token,判断当前redis 是否为空
if redisToken == "" { tokenKey := fmt.Sprintf("%d-%s-%s", claims.ID, claims.Role, "token")
redisToken := redis.Client.Get(redis.Ctx, tokenKey)
if redisToken.Val() == "" {
log.Println("redis异常", "Token status unauthorized") log.Println("redis异常", "Token status unauthorized")
c.JSON(http.StatusUnauthorized, gin.H{"error": "Token status unauthorized"}) c.JSON(http.StatusUnauthorized, gin.H{"error": "Token status unauthorized"})
c.Abort() c.Abort()
@@ -41,3 +48,26 @@ func JwtAuth(redisToken string) gin.HandlerFunc {
c.Next() c.Next()
} }
} }
// 获取上下文用户登录信息
func ParseAuth(c *gin.Context) (*types.JwtClaims, error) {
claims, ok := c.Get("Auth")
if !ok {
log.Printf("获取登录信息异常: %v", errcode.ErrJWTAuthNotFound)
return nil, errcode.ErrJWTAuthNotFound
}
json_claims, err := json.Marshal(claims)
if err != nil {
log.Printf("解析json异常: %v", err)
return nil, errcode.ErrJsonMarshal
}
var auth *types.JwtClaims
if err := json.Unmarshal(json_claims, &auth); err != nil {
log.Printf("解析json异常: %v", err)
return nil, errcode.ErrJsonUnmarshal
}
return auth, nil
}