2014-12-23 1 views
1

я использую следующую библиотеку Google oauth2 https://github.com/golang/oauth2golang Google oauth2 - не в состоянии получить информацию о пользователе (библиотека: https://github.com/golang/oauth2)

Я использую код, указанный в примеры (URL: http://play.golang.org/p/qXyuaVEhyS, https://godoc.org/golang.org/x/oauth2/google)

Я могу получить код аутентификации и маркер, но не в состоянии сделать запрос GET для получения информации о пользователе

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}) 
    }) 

ответ я получаю здесь очень большой и не имеет каких-либо информации о пользователе

ответ:

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, 
    .... 

Пожалуйста, помогите или предложить мне другую рабочую библиотека/код, который работает в приведенном выше сценарии

+0

Я получил подобная проблема, кстати, что API будет устаревшим в 20 апреля 2015 года .. – Kokizzu

+1

Привет, у меня есть рабочий код с использованием другой библиотеки. Пожалуйста, проверьте ответ на этот пост. Дайте мне знать, если у вас есть какие-то сомнения. – user3716835

+0

спасибо, я также нашел решение для своей проблемы http://stackoverflow.com/questions/29620344 – Kokizzu

ответ

10

эта библиотека работает для меня "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, 
    } 

Перенаправление пользователя по запросу:

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

Получение данных от 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) 
+0

это замечательно. просто то, что мне нужно! – pregmatch