Files
lone-services/pkg/utils/loginInfo.go
T
gjs c33fbdb422
CI / changes (push) Successful in 4s
CI / docker-bff (push) Successful in 3m21s
CI / docker-product (push) Successful in 3m39s
CI / docker-admin (push) Successful in 3m34s
CI / docker-user (push) Successful in 3m29s
CI / docker-ad (push) Successful in 3m29s
fix admin login log
2026-08-21 16:07:03 +08:00

75 lines
1.6 KiB
Go

package utils
import (
"context"
"net/url"
"strconv"
"github.com/mssola/user_agent"
"google.golang.org/grpc/metadata"
)
type UserInfo struct {
ID int64
Name string
RawUID string
Refresh string
ClientIP string // 客户端ip
UserAgent string // 完整原始ua
BrowserName string // 浏览器名称
BrowserVer 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")
ipList := md.Get("x-client-ip")
userAgentList := md.Get("x-user-agent")
if len(refreshList) == NumberZero {
refreshList = md.Get("X-Refresh")
}
var userInfo UserInfo
if len(uidList) > 0 {
userInfo.RawUID = uidList[0]
}
if len(nameList) > 0 {
userInfo.Name = nameList[0]
}
if len(refreshList) > 0 {
userInfo.Refresh = refreshList[0]
}
if len(ipList) > 0 {
userInfo.ClientIP = ipList[0]
}
if len(userAgentList) > 0 {
userInfo.UserAgent = userAgentList[0]
userInfo.UserAgent, _ = url.QueryUnescape(userInfo.UserAgent)
ua := user_agent.New(userInfo.UserAgent)
userInfo.BrowserName, userInfo.BrowserVer = ua.Browser()
}
userInfo.Valid = false
if userInfo.RawUID == StringEmpty {
return userInfo
}
uid, err := strconv.ParseInt(userInfo.RawUID, NumberTen, NumberSixtyFourth)
if err != nil {
return userInfo
}
userName, _ := url.QueryUnescape(userInfo.Name)
userInfo.ID = uid
userInfo.Name = userName
userInfo.Valid = true
return userInfo
}