You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.1 KiB
38 lines
1.1 KiB
package server
|
|
|
|
import (
|
|
"context"
|
|
"customer/internal/service"
|
|
"github.com/go-kratos/kratos/v2/errors"
|
|
"github.com/go-kratos/kratos/v2/middleware"
|
|
"github.com/go-kratos/kratos/v2/middleware/auth/jwt"
|
|
"github.com/go-kratos/kratos/v2/transport"
|
|
jwtv4 "github.com/golang-jwt/jwt/v4"
|
|
"strings"
|
|
)
|
|
|
|
func customerJWT(customerService *service.CustomerService) middleware.Middleware {
|
|
return func(handler middleware.Handler) middleware.Handler {
|
|
return func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
claims, ok := jwt.FromContext(ctx)
|
|
if !ok {
|
|
return nil, errors.Unauthorized("UNAUTHORIZED", "claims not found")
|
|
}
|
|
claimsMap := claims.(jwtv4.MapClaims)
|
|
id := claimsMap["jti"]
|
|
token, err := customerService.CD.GetToken(id)
|
|
if err != nil {
|
|
return nil, errors.Unauthorized("UNAUTHORIZED", "customer not found")
|
|
}
|
|
|
|
header, _ := transport.FromServerContext(ctx)
|
|
auths := strings.SplitN(header.RequestHeader().Get("Authorization"), " ", 2)
|
|
jwtToken := auths[1]
|
|
if jwtToken != token {
|
|
return nil, errors.Unauthorized("UNAUTHORIZED", "token was updated")
|
|
}
|
|
return handler(ctx, req)
|
|
}
|
|
}
|
|
}
|