dqjo4340 2018-01-03 13:04
浏览 46

Golang OAuth 2 Facebook错误代码2500(无法指定空标识符)

I am struggling with this error for days. Here are the steps that I followed to obtain the token.

  1. login in client side using facebook sdk
  2. pass the short lived token to server
  3. get long lived token

here is the error

{"error":{"message":"Cannot specify an empty identifier","type":"OAuthException","code":2500,"fbtrace_id":"BIEldWBZras"}}

Should Client authenticate directly? It looks like the oauth authentication is not established because of error code 2500. I also don't understand this sentence from the error "Cannot specify an empty identifier" here is the code so far:

func handleExtendFacebookToken(w http.ResponseWriter, r *http.Request)  {
w.Header().Add("Access-Control-Allow-Origin", "*")

shortLivedToken := r.FormValue("token")

tokenExpiration := time.Now().Local()

resp, err := http.Get("https://graph.facebook.com/oauth/access_token?client_id=" + oauthConf.ClientID + "&client_secret=" + oauthConf.ClientSecret +  "&grant_type=fb_exchange_token&fb_exchange_token=" +
    url.QueryEscape(shortLivedToken))
if err != nil {
    fmt.Printf("Get: %s
", err)
    return
}
defer resp.Body.Close()

response, err := ioutil.ReadAll(resp.Body)

if err != nil {
    return
}

var token FacebookToken;

//fmt.Print("response ",string(response))

err = json.Unmarshal(response, &token)

if err != nil {
    log.Fatal("error" + err.Error())
    return
}


//fmt.Println("duration ", token.AccessToken)

tokenExpiration = tokenExpiration.Add(time.Duration(token.Expiry) * time.Second)

fmt.Println(tokenExpiration)

/*resp, err = http.Get("https://graph.facebook.com/me?id&access_token=" +
    url.QueryEscape(token.AccessToken))
if err != nil {
    fmt.Printf("Get: %s
", err)
    return
}
defer resp.Body.Close()

response, err = ioutil.ReadAll(resp.Body)
if err != nil {
    fmt.Printf("ReadAll: %s
", err)
    return
}


//fmt.Println(string(response))
token.userId = string(response)*/

token.Expire_Date = tokenExpiration
token.AccessToken = strings.TrimSpace(token.AccessToken)
res, err := oauthConf.Client(oauth2.NoContext, token.convertFacebookToken()).Get("https://graph.facebook.com/me?id")

if err != nil {
    fmt.Printf("ReadAll: %s
", err)
    return
}

defer res.Body.Close()

response, err = ioutil.ReadAll(res.Body)
if err != nil {
    fmt.Printf("ReadAll: %s
", err)
    return
}

fmt.Println(string (response))
token.saveTokenToDB()
}
  • 写回答

1条回答 默认 最新

  • drbd65446 2018-01-03 14:05
    关注

    The error is at ?id

    res, err := oauthConf.Client(oauth2.NoContext, token.convertFacebookToken()).Get("https://graph.facebook.com/me?id")
    

    I was trying to use it like in facebook graph(it was not throwing any error). I was completely wrong. It should be:

    res, err := oauthConf.Client(oauth2.NoContext, token.convertFacebookToken()).Get("https://graph.facebook.com/me?fields=id")
    
    评论

报告相同问题?