为了账号安全,请及时绑定邮箱和手机立即绑定

oauth2 无法获取令牌:错误请求

oauth2 无法获取令牌:错误请求

Go
明月笑刀无情 2021-12-20 15:47:05
我编写了一个处理程序,以便在访问路由/auth/google/callback时尝试通过 OAuth2 使用 Google 帐户登录。处理程序是这样实现的:package routeimport (    "net/http"    "golang.org/x/oauth2"    "golang.org/x/oauth2/google"    "fmt")func GoogleOAuthHandler(w http.ResponseWriter, r *http.Request) {    conf:=&oauth2.Config{        ClientID:"myclientid",        ClientSecret:"myclientsecret",        RedirectURL:"http://localhost:3000",        Scopes:[]string{            "https://www.googleapis.com/auth/userinfo.profile",            "https://www.googleapis.com/auth/userinfo.email",        },        Endpoint:google.Endpoint,    }    code := r.URL.Query().Get("code")    token, err := conf.Exchange(oauth2.NoContext, code)    if err != nil {        http.Error(w, err.Error(), http.StatusInternalServerError)        return    }    fmt.Println(token)    http.Redirect(w, r, "/", http.StatusMovedPermanently)}在func main(),http.HandleFunc("/auth/google/callback",route.GoogleOAuthHandler)是设置当我访问该路径时,它会在浏览器上引发这样的错误:oauth2: cannot fetch token: 400 Bad RequestResponse: {  "error" : "invalid_request",  "error_description" : "Missing required parameter: code"}我错过了什么?请指导我正确访问 OAuth2 并从 Google 帐户获取令牌和信息
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

您正在尝试访问code未在您的 url 中定义的 url 参数 ( )。

r.URL.Query().Get()返回 url 地址中定义的 url 参数。在您的情况下,您正在搜索code缺少的参数。

检查Exchange方法,这会将授权代码转换为令牌。

func (c *Config) Exchange(ctx context.Context, code string) (*Token, error).

您的情况下的令牌是一个 url 参数,但未声明。总而言之,请在 url 中包含令牌字符串作为参数,否则请在代码中的某处声明。


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 299 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信