1、示例报告改未登录可访问
2、增加代理推广报告查询注册UUID账户
This commit is contained in:
@@ -3,23 +3,47 @@ package ctxdata
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
const CtxKeyJwtUserId = "userId"
|
||||
|
||||
// 定义错误类型
|
||||
var (
|
||||
ErrNoUserIdInCtx = errors.New("上下文中没有用户ID") // 未登录
|
||||
ErrInvalidUserId = errors.New("用户ID格式无效") // 数据异常
|
||||
)
|
||||
|
||||
// GetUidFromCtx 从 context 中获取用户 ID
|
||||
func GetUidFromCtx(ctx context.Context) (int64, error) {
|
||||
// 尝试从上下文中获取 jwtUserId
|
||||
jsonUid, ok := ctx.Value(CtxKeyJwtUserId).(json.Number)
|
||||
if !ok {
|
||||
return 0, fmt.Errorf("无法获取用户 ID, CtxKeyJwtUserId = %v", CtxKeyJwtUserId)
|
||||
value := ctx.Value(CtxKeyJwtUserId)
|
||||
if value == nil {
|
||||
return 0, ErrNoUserIdInCtx
|
||||
}
|
||||
|
||||
// 尝试转换为 json.Number
|
||||
jsonUid, ok := value.(json.Number)
|
||||
if !ok {
|
||||
return 0, fmt.Errorf("%w: 期望类型 json.Number, 实际类型 %T", ErrInvalidUserId, value)
|
||||
}
|
||||
|
||||
// 转换为 int64
|
||||
uid, err := jsonUid.Int64()
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("用户 ID 转换失败: %v", err)
|
||||
return 0, fmt.Errorf("%w: %v", ErrInvalidUserId, err)
|
||||
}
|
||||
|
||||
return uid, nil
|
||||
}
|
||||
|
||||
// IsNoUserIdError 判断是否是未登录错误
|
||||
func IsNoUserIdError(err error) bool {
|
||||
return errors.Is(err, ErrNoUserIdInCtx)
|
||||
}
|
||||
|
||||
// IsInvalidUserIdError 判断是否是用户ID格式错误
|
||||
func IsInvalidUserIdError(err error) bool {
|
||||
return errors.Is(err, ErrInvalidUserId)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user