使用golang gin框架sessions时碰到的gob问题
2018-07-04 15:01
3215 查看
使用golang开发后端api,使用的是gin框架。上线之后需要用到权限控制,就得先把登录功能加上。
添加登录过程中,引入了gin的sessions间件 : https://github.com/gin-contrib/sessions
并使用最简单的cookie来保存session
第一版的代码如下:
不管怎么测试都无法通过session获取登录用户信息,cookie里面也没有相关的数据,后面经过查看sessions的源代码和debug,发现
/vendor/github.com/gorilla/sessions/store.go的如下方法中有报错,通过断点看出其中err!= nil
打印出的error信息如下:
经过网上搜索,添加如下代码解决
gob是Golang包自带的一个数据结构序列化的编码/解码工具。
对高级对象进行编码和解码,需要先调用gob.Register进行类型注册,比如自定义struct,map[string]interface{}{}等等
添加登录过程中,引入了gin的sessions间件 : https://github.com/gin-contrib/sessions
并使用最简单的cookie来保存session
第一版的代码如下:
func userLogin(c *gin.Context) (interface{}, *common.APIError) { var param = &types.User{} err := c.BindJSON(¶m) if err != nil { return "request error", common.WrapAndLog("parase request data error", err) } u := user.UserLogin(*param) if u.Uid != "" { session := sessions.Default(c) session.Set("login_user", u) session.Save() return u, nil } return nil, nil } func userInfo(c *gin.Context) (interface{}, *common.APIError) { session := sessions.Default(c) u := session.Get("login_user") logrus.Debug("login user ", session, session.Get("login_user")) return u, nil }
不管怎么测试都无法通过session获取登录用户信息,cookie里面也没有相关的数据,后面经过查看sessions的源代码和debug,发现
/vendor/github.com/gorilla/sessions/store.go的如下方法中有报错,通过断点看出其中err!= nil
func (s *CookieStore) Save(r *http.Request, w http.ResponseWriter, session *Session) error { encoded, err := securecookie.EncodeMulti(session.Name(), session.Values, s.Codecs...) if err != nil { return err } http.SetCookie(w, NewCookie(session.Name(), encoded, session.Options)) return nil }
打印出的error信息如下:
securecookie: error - caused by: securecookie: error - caused by: gob: type not registered for interface: types.User
经过网上搜索,添加如下代码解决
gob.Register(types.User{})
gob是Golang包自带的一个数据结构序列化的编码/解码工具。
对高级对象进行编码和解码,需要先调用gob.Register进行类型注册,比如自定义struct,map[string]interface{}{}等等
相关文章推荐
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.3 资源控制器
- golang实战使用gin+xorm搭建go语言web框架restgo详解1.2 我要做什么
- golang实战使用gin+xorm搭建go语言web框架restgo详解6.4 推荐编程方式
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.9 控制器controller编程示例
- golang实战使用gin+xorm搭建go语言web框架restgo详解10 使用restgo搭建后台管理系统
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.4 控制器参数绑定
- golang实战使用gin+xorm搭建go语言web框架restgo详解4 路由配置
- golang实战使用gin+xorm搭建go语言web框架restgo详解8 关于模板
- 初次使用运行时权限请求框架PermissionsDispatcher碰到的问题
- golang实战使用gin+xorm搭建go语言web框架restgo详解7 视图层V
- java程序员10分钟可上手的golang框架golang实战使用gin+xorm搭建go语言web框架restgo
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.7 控制器数据响应
- golang实战使用gin+xorm搭建go语言web框架restgo详解9 session、日志、鉴权、验证码等
- golang实战使用gin+xorm搭建go语言web框架restgo详解3 系统常用配置参数
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.6 控制器参数校验
- golang实战使用gin+xorm搭建go语言web框架restgo详解2 框架基本架构
- golang实战使用gin+xorm搭建go语言web框架restgo详解1.1 go语言的困境
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.5 控制器模型绑定
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.2 跳转和重定向
- golang实战使用gin+xorm搭建go语言web框架restgo详解5 控制器C