2011-11-03 26 views
0

我有一個啓動Facebook OAuth process Django模板做:無法使用Facebook進行OAuth;我的下一個調試步驟是什麼?

window.location='https://www.facebook.com/dialog/oauth?client_id=MY_CLIENT_ID&redirect_uri=http%3A//localhost%3A8000/fbpanel/explore-python' 

然後,在我的Django的看法,我得到的結果代碼如下:

import cgi 
import urllib 

# [...] 

code = request.GET['code'] 
args = { 
    'client_id': MY_CLIENT_ID, 
    'redirect_uri': 'http://localhost:8000/fbpanel/explore_python' 
    'client_secret': MY_CLIENT_SECRET, 
    'code': code, 
} 
url = 'https://graph.facebook.com/oauth/access_token?' + \ 
     urllib.urlencode(args) 

raw_response = urllib.urlopen(url).read() 
response = cgi.parse_qs(raw_response)  

if response: 
    error = '' 
    if response['access_token']: 
     access_token = response['access_token'][0] 
    if response['expires']: 
     expires = response['expires'][0] 
else: 
    access_token = 'No access token returned' 
    expires = 'No expiration given' 
    error = raw_response 

不變的是,responseNoneraw_response包含Error: {"error":{"message":"Error validating verification code.","type":"OAuthException"}}

JavaScript SDK相同的憑據驗證正常。我在這種情況下綁定了我的服務器到localhost,並在我的官方應用域中設置了localhost:8000。在我這樣做之前,JavaScript不會工作。之後,它做到了。所以我不認爲localhost是問題。

我手動通過代碼加強,打印由FB返回了code, 然後手動運行由Python解釋器線上面的代碼行, 我什麼都看不到我做錯了。我的下一個調試步驟是什麼?如果您收到OAuthException,FB 文檔不提供指導。

+0

我看不出你的代碼有什麼問題,雖然我對python不太好。我也懷疑本地主機是問題所在,因爲我期望在這種情況下錯誤消息提及redirect_uri(如果您打算將redirect_uri參數用作測試,它應該這樣做)。您是否嘗試過打印出「url」的值並手動將其輸入到瀏覽器地址欄中? –

+1

我剛剛注意到......你在另一個地方有'explore-python'(連字符),另一個'explore_python'(有一個下劃線)......是在實際的代碼中嗎? –

+0

就是這樣,@FloydWilburn。如果您的redirect_uri在標記請求和代碼請求中不完全匹配,FB將無法驗證您的身份。如果您將您的建議轉到答案,我會接受它。 – ObscureRobot

回答

3

當您請求令牌時,redirect_uri所用的值必須與請求代碼時的值完全相同。由於在請求令牌時沒有發生實際的重定向,因此可能很容易錯過小的差異。在這種情況下,錯誤消息不是特別描述性的;它的真正含義是「你發送的參數與你發送的代碼值不一致」。

+0

太好了,謝謝。我已經打開了一個[與Facebook的docbug](https://developers.facebook.com/bugs/243049145752532)。 – ObscureRobot

+0

絕對修復它對我來說也是如此。非常感謝。 – Paul

相關問題