<分区>
我为这个错误苦苦挣扎了好几天。以下是我获取 token 所遵循的步骤。
- 使用facebook sdk 登入客户端
- 将短期 token 传递给服务器
- 获取长期 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()
}