
//中间件里边是这样定义的
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 SethShi 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 SethShi 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 SethShi 2023-01-10 13:31:20 +08:00 @awanganddong 没理解你的意思, 不应该是第一行吗? 直接给原始数据和返回后的数据看看 |
12 awanganddong OP @seth19960929 我试出来了,首先定义个新结构体,然后 make 这个结构,对这个结构体赋值{"id":1}。然后对{"name":"\u674e\u56db"},{"name":"\u5f20\u4e09"}结构体循环赋值到新结构体上。 |