facebook-graph-api - Golang oauth 2 facebook 错误代码 2500(无法指定空标识符)

标签 facebook-graph-api go oauth-2.0

<分区>

我为这个错误苦苦挣扎了好几天。以下是我获取 token 所遵循的步骤。

  1. 使用facebook sdk 登入客户端
  2. 将短期 token 传递给服务器
  3. 获取长期 token

这里是错误

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

客户端应该直接验证吗?看起来因为错误代码 2500 没有建立 oauth 身份验证。我也没有从错误“无法指定空标识符”中理解这句话 这是到目前为止的代码:

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\n", 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\n", err)
    return
}
defer resp.Body.Close()

response, err = ioutil.ReadAll(resp.Body)
if err != nil {
    fmt.Printf("ReadAll: %s\n", 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\n", err)
    return
}

defer res.Body.Close()

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

fmt.Println(string (response))
token.saveTokenToDB()
}

最佳答案

错误在 ?id

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

我试图像在 facebook 图表中那样使用它(它没有抛出任何错误)。我完全错了。应该是:

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

关于facebook-graph-api - Golang oauth 2 facebook 错误代码 2500(无法指定空标识符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48078002/

相关文章:

android - 如何在 android 中获取 facebook 用户访问 token ?

ios - 使用 session 处理 Facebook iOS 中的取消按钮

facebook - 柯达 Kiosk Facebook 实现

facebook-graph-api - 新的 Facebook 权限 API (v2.0) 支持

go - 无法在 Fedora 31 中安装 gopls

OAuth 2.0 token 和生命周期

go - 从 Go 中的本地 var 中消除包名称的歧义

go - 如何在 Go 中解码 JWT token ?

api - Google Oauth2 userinfo API 不返回用户名数据

oauth-2.0 - Xamarin.Auth Google Presenter 未在 Android Xamarin.Forms 应用程序中关闭