首页 > 解决方案 > 如何在 Go 中访问请求特定数据?

问题描述

我有一个用 go 编写的 API,我正在使用 gin-gonic 框架来实现我的端点。我的项目遵循干净的架构,这意味着我的整个应用程序分为多个层,即控制器、服务、存储库和会话。端点由 auth0 保护,验证在 gin 中间件中进行。在中间件中,我可以从 JWT 中提取主题(在标题中设置)

现在,这是我的问题。我想在我的查询中使用这个主题值。我想知道我是否可以将主题(子)存储在上下文中并在我的代码的其他部分中使用它而无需传递上下文。这可能吗?还是我只需要更新我的所有函数并为所有下游调用添加一个新参数“Sub”?

我指的是使用某种全局变量来访问请求特定数据(来自 JWT 令牌的 SUB)。我知道这是一个不好的做法 - 我只是想知道除了传递请求特定的数据之外是否还有其他方法可以实现这一点?任何帮助表示赞赏。

标签: gogo-gin

解决方案


这确实是上下文的全部要点 - 它的存在是为了保存这些东西并在链中传递。这很重要,因为您希望将其保持在请求的范围内——如果您开始使用全局变量,您可能会遇到争用问题,因为多个请求会混淆相同的数据。同样,如果令牌在请求之间无效。

如果您的身份验证中间件在您的查询之前运行(听起来确实如此),那么只需让它以您满意的方式将主题置于上下文中即可。


推荐阅读