2

大約一週前,我的網站上的Facebook登錄工作正常,但現在當我嘗試使用「代碼」檢索訪問令牌時,我收到錯誤「此授權碼已被使用」 。我查了很多文檔和建議,但沒有任何結果。使用Facebook OAuth無法獲取訪問令牌

步驟來重現(使用FB PHP SDK):

  1. 發送用戶用正確的FB權威性url編碼返回URI(帶斜線):

    https://www.facebook.com/dialog/oauth?client_id=[my_cid]&redirect_uri=http%3A%2F%2Fmydomain.com%2Fauth%2Ffacebook%2F&state=e15e0894cd922098f9f8f340c820538d&scope=email&display=page 
    
  2. 上接收代碼PARAM我重定向uri(一切順利)

  3. 發送訪問令牌請求:

    https://graph.facebook.com/oauth/access_token?client_id=[my_cid]&redirect_uri=http%3A%2F%mydomain.com%2Fauth%2Ffacebook%2F&client_secret=[my_secret]&code=[long_code_goes_here] 
    

我試過也沒有urlencoded redirect_uri。

爲什麼?

回答

2

這是由於到目前爲止,Facebook的變化是可選的,但將於12/5/12推出給大家。從Developer Roadmap爲十二月'12重大更改: 我們只會 允許授權碼被用於訪問令牌交換

爲OAuth授權碼的新安全限制一次 會要求他們爲交換創建10分鐘內訪問令牌。這與OAuth 2.0規範 一致,從一開始就聲明「授權代碼必須是 短命和單次使用」。有關更多信息,請查看我們的 身份驗證文檔。

所以,當你第一次得到一個對的access_token用戶,你需要將它存儲,然後明確下一次用戶需要與FBAPI交互設置:$ facebook-> setAccessToken($ theToken);

+0

因此,如果我得到用戶的令牌,並且不會在下一次調用setAccessToken,我以後不能再調用它? –

+1

你可以。你弄錯了,這與此無關。 –