Я начинающий разработчик приложений для Facebook, но я опытный разработчик.Я использую web.py в качестве веб-фреймворка, и, что еще хуже, я новичок в Python.
Я сталкиваюсь с проблемой, когда при попытке перейти на использованиеболее новый "OAuth 2.0 для Canvas", я просто не могу заставить что-либо работать.Единственное, что возвращается в моем приложении Facebook, это «Нет».
Моя мотивация для включения OAuth 2.0 заключается в том, что похоже, что Facebook заставит его к июлю, и я мог бы также изучить его сейчас иТеперь придется переписать его через несколько недель.
Я включил «OAuth 2.0 для Canvas» в расширенных настройках и переписал свой код для поиска «signature_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 найден.
Мой вопрос таков: почему не выводится «Hello», а вместо этого отображается только «None»?
Похоже, что я пропалчто-то очень фундаментальное, потому что, клянусь вам, я искал в Интернете решения, и я много раз читал об этом на страницах Facebook.Точно так же я нашел много хороших блогов и вопросов о стековом потоке, которые точно описывают, как использовать OAuth 2.0 и signature_request.Но тот факт, что я получаю правильный oauth_token, но мой единственный вывод - «None», заставляет меня думать, что есть что-то фундаментальное, что я делаю неправильно.Я понимаю, что "None" - это особое слово в python, поэтому, возможно, в этом причина, но я не могу точно определить, что я делаю неправильно.
Когда я выключаю OAuth 2.0 и возвращаю свойкод для поиска старых данных POST, я могу легко напечатать материал на экран.
Любая помощь по этому вопросу будет принята с благодарностью!