//中间件里边是这样定义的
var user models.User
res := pkg.Db.Model(&models.User{}).Where("accid = ?", accid).
Where("token = ?", token).
Where("token_expire >= ?", time.Now().Unix()).Find(&user)
if res.Error != nil {
pkg.Fail(c, 403, "用户 token 已失效", nil)
c.Abort()
return
}
c.Set("user", user)
user, ok := c.Get("user")
if !ok {
return errors.New("获取用户信息失败"), nil
}
但是在方法里边获取报错
1
Aresrun 2023-01-09 12:10:11 +08:00
```
// Header is a intelligent shortcut for c.Writer.Header().Set(key, value). // It writes a header in the response. // If value == "", this method removes the header `c.Writer.Header().Del(key)` func (c *Context) Header(key, value string) { if value == "" { c.Writer.Header().Del(key) return } c.Writer.Header().Set(key, value) } // GetHeader returns value from request headers. func (c *Context) GetHeader(key string) string { return c.requestHeader(key) } ``` |
2
seth19960929 2023-01-09 13:25:47 +08:00
中间件加个日志, 确保你的 user set 进去了
|
3
hteen 2023-01-09 13:36:26 +08:00
auth.Use(middleware.UserAuth).Use(func(ctx *gin.Context) {
controller.User = ctx.MustGet("user").(*models.Users) }) 中间件顺序对了吗 |
4
awanganddong OP fmt.Printf("%v", user)
userInfo, err := json.Marshal(user) if err != nil { pkg.Fail(c, 403, "用户信息转化失败", nil) c.Abort() return } c.Writer.Header().Set("userInfo", string(userInfo)) user := c.Writer.Header().Get("userInfo") err := json.Unmarshal([]byte(user), &userInfo) if err != nil { return err, nil } 我是直接转化成字符串来处理 |
5
awanganddong OP 谢谢各位,现在可以了。
|
6
awanganddong OP @seth19960929 请教下,可变变量如何传值
获取了一个数组[1,2,3] 我转化的数据是"1","2" 但是给 redis 传值失败 func (c *cmdable) HMGet(key string, fields ...string) *SliceCmd |
7
seth19960929 2023-01-10 10:13:28 +08:00
@awanganddong 你的用法错了, 调用的时候应该是
fields := []string{"name", "age", "weight"} key := "users:1" redis.HMGet(key, fields...) |
8
awanganddong OP |
9
awanganddong OP 类似于 php 的 array_merge 把不同字段的数组拼接到一块
|
10
awanganddong OP 返回的 json 如下
[{"id":1},{"name":"\u674e\u56db"},{"name":"\u5f20\u4e09"}] |
11
seth19960929 2023-01-10 13:31:20 +08:00
@awanganddong 没理解你的意思, 不应该是第一行吗? 直接给原始数据和返回后的数据看看
|
12
awanganddong OP @seth19960929 我试出来了,首先定义个新结构体,然后 make 这个结构,对这个结构体赋值{"id":1}。然后对{"name":"\u674e\u56db"},{"name":"\u5f20\u4e09"}结构体循环赋值到新结构体上。
|