Files
lone-services/pkg/utils/loginInfo.go
T
gjs 9865f7dae9
CI / changes (push) Successful in 6s
CI / docker-bff (push) Successful in 8s
CI / docker-product (push) Failing after 2s
add Refresh
2026-08-10 18:05:29 +08:00

69 lines
1.1 KiB
Go

package utils
import (
"context"
"net/url"
"strconv"
"google.golang.org/grpc/metadata"
)
type UserInfo struct {
ID int64
Name string
RawUID string
Refresh string
Valid bool
}
func GetUserFromCtx(ctx context.Context) UserInfo {
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return UserInfo{Valid: false}
}
uidList := md.Get("x-user-id")
nameList := md.Get("x-user-name")
refreshList := md.Get("x-refresh")
if len(refreshList) == 0 {
refreshList = md.Get("X-Refresh")
}
rawUID := ""
encodeName := ""
refresh := ""
if len(uidList) > 0 {
rawUID = uidList[0]
}
if len(nameList) > 0 {
encodeName = nameList[0]
}
if len(refreshList) > 0 {
refresh = refreshList[0]
}
if rawUID == "" {
return UserInfo{Valid: false, Refresh: refresh}
}
uid, err := strconv.ParseInt(rawUID, 10, 64)
if err != nil {
return UserInfo{
RawUID: rawUID,
Name: encodeName,
Refresh: refresh,
Valid: false,
}
}
userName, _ := url.QueryUnescape(encodeName)
return UserInfo{
ID: uid,
Name: userName,
RawUID: rawUID,
Refresh: refresh,
Valid: true,
}
}