Files
service-common/utils/session.go

70 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package utils
import (
"context"
"google.golang.org/grpc/metadata"
"strconv"
"strings"
)
type UserSession struct {
USN int64 `json:"usn" redis:"usn"`
IP string `json:"ip" redis:"ip"`
UserAgent string `json:"ua" redis:"ua"`
AccessToken string `json:"at" redis:"at"`
RefreshToken string `json:"rt" redis:"rt"`
}
func (us *UserSession) GetUsnKey() string {
return "usn"
}
func (us *UserSession) GetAccessTokenKey() string {
return "at"
}
func (us *UserSession) GetRefreshTokenKey() string {
return "rt"
}
// Deprecated: 请使用 ShouldGetUsn 替代,示例:
// usn := utils.ShouldGetUsn(ctx)
// 不需要判断 usn 是否为 0,只有不鉴权接口的 usn 才可能是 0。
func ShouldBindUsn(ctx context.Context, usn *int64) bool {
if md, ok := metadata.FromIncomingContext(ctx); ok {
usnArr := md.Get("X-Usn")
if len(usnArr) == 0 || usnArr[0] == "" {
return false
}
*usn = StringToInt64(usnArr[0])
}
return *usn != 0
}
func ShouldGetUsn(ctx context.Context) int64 {
if md, ok := metadata.FromIncomingContext(ctx); ok {
usnArr := md.Get("X-Usn")
if len(usnArr) == 0 || usnArr[0] == "" {
return 0
}
return StringToInt64(usnArr[0])
}
return 0
}
func GetPlatformAndUsn(token string) (int32, int64, bool) {
str := strings.Split(token, ":")
if len(str) != 3 {
return 0, 0, false
}
platform, err := strconv.Atoi(str[0])
if err != nil {
return 0, 0, false
}
usn, err := strconv.Atoi(str[1])
if err != nil {
return 0, 0, false
}
return int32(platform), int64(usn), true
}