douyu7879 2014-12-23 18:22
浏览 236
已采纳

golang Google oauth2-无法获取用户信息(库:https://github.com/golang/oauth2)

i am using the following library for google oauth2 https://github.com/golang/oauth2

I am using the code given in the examples (url : http://play.golang.org/p/qXyuaVEhyS ,https://godoc.org/golang.org/x/oauth2/google )

I am able to get the auth code and token , but not able to make a get request to get user info

MyCode :

conf := &oauth2.Config{
        ClientID:     "my client id",
        ClientSecret: "secred id",
        RedirectURL:  "http://localhost:3000/googlelogin",
        Scopes: []string{
            "https://www.googleapis.com/auth/userinfo.profile",
        },
        Endpoint: google.Endpoint,
    }

m.Get("/googleloginrequest", func(r render.Render, request *http.Request) {

    url := conf.AuthCodeURL("state")
    fmt.Printf("Visit the URL for the auth dialog: %v", url)

    r.Redirect(url)

})

m.Get("/googlelogin", func(r render.Render, request *http.Request) {

        authcode := request.FormValue("code")

        tok, err := conf.Exchange(oauth2.NoContext, authcode)
        if err != nil {
            log.Fatal(err)
        }

        client := conf.Client(oauth2.NoContext, tok)

        resp, err :=client.Get("https://www.googleapis.com/userinfo/v2/me")

        r.JSON(200, map[string]interface{}{"status":resp})
    })

the response i get here is very big and does not have any user info

response :

 200 OK","StatusCode":200,"Proto":"HTTP/1.1","ProtoMajor":1,"ProtoMinor":1,"Header":{"Alternate-
Protocol":["443:quic,p=0.02"],"Cache-Control":["no-cache, no-store, max-age=0, must-
revalidate"],"Content-Type":["application/json; charset=UTF-8"],"Date":["Tue, 23 Dec 2014 18:18:19 
    GMT"],"Expires":["Fri, 01 Jan 1990 00:00:00 GMT"],"Pragma":["no-cache"],"Server":["GSE"],"Vary":
    ["Origin","X-Origin"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["SAMEORIGIN"],"X-Xss-
    Protection":["1; mode=block"]},"Body":{},"ContentLength":-1,"TransferEncoding":
    ["chunked"],"Close":false,"Trailer":null,"Request":{"Method":"GET","URL":
 {"Scheme":"https","Opaque":"","User":null,"Host":"www.googleapis.com","Path":"/userinfo/v2/me","RawQuery
    ":"","Fragment":""},"Proto":"HTTP/1.1","ProtoMajor":1,"ProtoMinor":1,"Header":{"Authorization":["Bearer 
    ya29.5QDPWWRKB7tNkdB2Yvm0PCST9LF_iQhjN1Y0g2abE-
    lnw9BNgEd_n3A85ZfJzDNYZywqqElCb7Z2xA"]},"Body":null,"ContentLength":0,"TransferEncoding":null,"Close":fa
    lse,"Host":"www.googleapis.com","Form":null,"PostForm":null,"MultipartForm":null,"Trailer":null,"RemoteA
    ddr":"","RequestURI":"","TLS":null},"TLS":{"Version":771,"HandshakeComplete":true,"DidResume":false, 
    ....

Please help, or suggest me other working library/code ,which works in the above scenario

  • 写回答

1条回答 默认 最新

  • dongpai6567 2015-04-14 07:39
    关注

    this Library works for me "golang.org/x/oauth2/google"

    Initiatialization

    googleconf = &oauth2.Config{
            ClientID:     "your-client-id",
            ClientSecret: "youe-secred",
            RedirectURL:  "http://localhost:300/googlelogin",
            Scopes: []string{
                "https://www.googleapis.com/auth/userinfo.profile",
                "https://www.googleapis.com/auth/userinfo.email",
            },
            Endpoint: google.Endpoint,
        }
    

    Redirect User on Request :

    url := googleconf.AuthCodeURL("state")
    response.Redirect(url)
    

    Getting Data From Google :

        authcode := request.FormValue("code")
    
        tok, err := googleconf.Exchange(oauth2.NoContext, authcode)
        if err != nil {
            fmt.Println("err is", err)
        }
    
        fmt.Println("token is ", tok)
        response, err := http.Get("https://www.googleapis.com/oauth2/v2/userinfo?access_token=" + tok.AccessToken)
    
        defer response.Body.Close()
        contents, err := ioutil.ReadAll(response.Body)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程