登录
首页 >  Golang >  Go问答

Beego - 我需要使用“context.Context”代替 Beego 上下文

来源:stackoverflow

时间:2024-03-25 09:03:30 198浏览 收藏

在使用 Beego 框架时,需要将 Beego 上下文替换为 "context.Context",以便与 Google OAuth2 库交互。Beego 上下文实例 "this.ctx" 无法直接传递给 OAuth2 库,因为它不是 "context.Context" 类型。解决方法是使用 "c.Ctx.Request.Context()",它可以获取与当前 HTTP 请求关联的 "context.Context"。此外,在函数参数中使用指针是不必要的,因为 "context.Context" 是一个接口。

问题内容

我正在尝试编写一个函数来验证 google id 令牌。

oauth2 包要求我在创建新服务时传递上下文,如下所示:

package services

import (
    "context"
    "google.golang.org/api/oauth2/v2"
)

func validatetoken(ctx *context.context, idtoken string) {
    // i need to pass context.context in to the oauth2 library
    oauth2service, err := oauth2.newservice(*ctx)
    tokeninfocall := oauth2service.tokeninfo()
    tokeninfocall.idtoken(idtoken)
    tokeninfo, err := tokeninfocall.do()

在 beego 中 this.ctx 是 beego 上下文模块的一个实例,所以这段代码无法编译:

func (c *tokencontroller) post(ctx *context.context) {
    requestparams := struct {
        google_id_token string
    }{}
    err := json.unmarshal(c.ctx.input.requestbody, &requestparams)
    // type mismatch
    services.validatetoken(c.ctx, requestparams.google_id_token)

如何获取需要传递到 oauth2 库的上下文?

编辑:我正在通过传入 context.background() 来解决它,但我不确定我是否完全理解它的副作用。我对 golang 还很陌生,感觉后台上下文应该只在“更高”级别使用?

func ValidateToken(idToken string) {
    ctx := context.Background()
    oauth2Service, err := oauth2.NewService(ctx)

正确答案


试试这个:c.Ctx.Request.Context()

也不要在函数 ValidateToken 中的 arg ctx 中使用指针,因为 stdlib 中的 context.Context 是接口

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Beego - 我需要使用“context.Context”代替 Beego 上下文》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>