既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
下面就开始和我进阶实战吧:
登录鉴权
我们在上一篇文章中有介绍,系统的登录鉴权是通过gtoken实现的,有的小伙伴没有搞清楚登录信息存储在哪里?我们是如何获得当前登录用户的信息?
首先gtoken的数据默认使用内存缓存gcache,这种缓存会随着服务的终止而销毁,当重启服务时,之前缓存的数据就丢失了;gtoken也支持使用redis,比如我们的项目中就是使用了gredis,将登录信息存储在redis中进行管理。
更多关于gtoken的知识点可以看这篇专题文章:# 通过阅读源码解决项目难题:GToken替换JWT实现SSO单点登录
如果你基础比较弱的话,我还录制了视频教程:# 【视频】登录鉴权的三种方式:token、jwt、session实战分享
下面聊聊如何获得登录用户信息的问题:
我们使用Go语言无论开发http项目还是rpc项目,上下文都是很重要的概念,用于共享变量和链路跟踪。
我们通过Context上下文对象在一次请求中设置用户信息,共享变量,进而实现在后续链路中都能获得当前登录用户的信息:
Context上下文
以修改密码举例:
我们通过ghttp.Request的实例r,调用GetCtxVar() 方法。
比如:r.GetCtxVar(middleware.CtxAccountId),通过这种方式我们就可以获得登录用户信息了
小提示:为了行文清晰,让大家更直观的看到和知识点相关的代码,不重要的代码会用三个竖着的.省略。完整的代码可以fork文末的GitHub,已把这个项目开源。
调用示例代码
func (s \*rotationService) UpdateMyPassword(r \*ghttp.Request, req \*UpdateMyPasswordReq) (res sql.Result, err error) {
.
.
.
//获得当前登录用户
req.Id = gconv.Int(r.GetCtxVar(middleware.CtxAccountId))
ctx := r.GetCtx()
res, err = dao.AdminInf