我是一名Facebook應用程序開發人員,但我是一名經驗豐富的開發人員。我使用web.py作爲我的web框架,並且讓事情變得更糟,我是Python的新手。當我打開「Canvas 2.0 OAuth 2.0」時,我的Python web.py Facebook應用程序返回的「None」沒有任何結果
我遇到了一個問題,當我嘗試切換到使用較新的「Canvas 2.0 OAuth 2.0」時,我根本無法獲得任何工作。在我的Facebook應用程序中返回的唯一東西是「無」。
我開啓OAuth 2.0的動機是因爲它聽起來像Facebook將在7月份推出它,現在我不妨瞭解它,現在不得不在幾個星期內重寫它。
我在高級設置中打開了「Canvas的OAuth 2.0」,並重寫了我的代碼以查找「signed_request」,當我的測試用戶試圖訪問我的應用程序時,它會發送到我的服務器。
我的代碼如下(我已經刪除調試語句和錯誤檢查簡潔):
#!/usr/bin/env python
import base64
import web
import minifb
import urllib
import json
FbApiKey = "AAAAAA"
FbActualSecret = "BBBBBB"
CanvasURL = "http://1.2.3.4/fb/"
RedirectURL="http://apps.facebook.com/CCCCCCCC/"
RegURL = 'https://graph.facebook.com/oauth/authorize?client_id=%s&redirect_uri=%s&type=user_agent&display=page' % (FbApiKey, RedirectURL)
urls = (
'/fb/', 'index',
)
app = web.application(urls, locals())
def authorize():
args = web.input()
signed_request = args['signed_request']
#split the signed_request via the .
strings = signed_request.split('.')
hmac = strings[0]
encoded = strings[1]
#since uslsafe_b64decode requires padding, add the proper padding
numPads = len(encoded) % 4
encoded = encoded + "=" * numPads
unencoded = base64.urlsafe_b64decode(str(encoded))
#convert signedRequest into a dictionary
signedRequest = json.loads(unencoded)
try:
#try to find the oauth_token, if it's not there, then
#redirect to the login page
access_token = signedRequest['oauth_token']
print(access_token)
except:
print("Access token not found, redirect user to login")
redirect = "<script type=\"text/javascript\">\ntop.location.href=\"" +_RegURL + "\";\n</script>"
print(redirect)
return redirect
# Do something on the canvas page
returnString = "<html><body>Hello</body></html>"
print(returnString)
class index:
def GET(self):
authorize()
def POST(self):
authorize()
if __name__ == "__main__":
app.run()
暫時,我想集中精力在用戶已經登錄的情況下,所以假設找到了oauth_token。
我的問題是:爲什麼我的「你好」沒有被輸出,而是我看到的只是「無」?
看來我錯過了一些非常基本的東西,因爲我向你發誓,我已經在互聯網上尋找解決方案,而且我已經閱讀過很多次這樣的Facebook頁面。同樣,我發現了許多很好的博客和stackoverflow問題,可以準確記錄如何使用OAuth 2.0和signed_request。但是我得到了一個合適的oauth_token,但是我唯一的結果是「無」,這讓我覺得有一些根本性的錯誤。我意識到「無」是python中的一個特殊詞,所以也許這就是原因,但我不能確切地說明我做錯了什麼。
當我關閉OAuth 2.0並恢復代碼以查找舊的POST數據時,我可以輕鬆地將東西打印到屏幕上。
任何幫助,將不勝感激!