app-engine-patch e pyFacebook não funciona
-
19-09-2019 - |
Pergunta
Eu estou tentando escrever um aplicativo facebook usando app-engine-patch e pyFacebook. Eu estou usando nada, mas os exemplos fornecidos com cada ferramenta e por algum motivo ele não vai funcionar.
Eu combinei os dois apenas como descrito na answet aceito aqui: Facebook, Django e Google App Engine
app-engine-patch parece funcionar muito bem, mas quando eu tento usar @ facebook.require_login () eu recebo este a partir de registros do GAE:
Exception in request:
Traceback (most recent call last):
File "/base/data/home/apps/app-name/1.339079629847560090/common/zip-packages/django-1.1.zip/django/core/handlers/base.py", line 92, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/base/data/home/apps/app-name/1.339079629847560090/facebook/djangofb/__init__.py", line 87, in newview
if not fb.check_session(request):
File "/base/data/home/apps/app-name/1.339079629847560090/facebook/__init__.py", line 1293, in check_session
self.session_key_expires = int(params['expires'])
ValueError: invalid literal for int() with base 10: 'None'
Este happends não importa qual visualizar I decorar com @ facebook.require_login ()
Eu estou usando a mais recente de ambos os projetos e não tenho idéia de por que isso não vai funcionar.
Muito obrigado pelo seu tempo.
UPDATE: Eu fiz uma quickfix para pyFacebook, mas eu só esqueceu de colocá-lo de volta na linha
.Agora também como uma resposta, uma vez que parece ser o único caminho.
Se você alterar facebook / linha __ init__.py 1292+ com isso:
if params.get('expires'):
self.session_key_expires = int(params['expires'])
Para isto:
if params.get('expires'):
if params['expires'] == 'None':
params['expires'] = 0
self.session_key_expires = int(params['expires'])
Ele vai trabalhar, mas é um hack e talvez isso poderia ser feito de forma mais elegante, mas funciona. ponto Tenho a pyFacebook devs para esta discussão, talvez eles vão ter uma solução melhor.
Solução 2
Se você alterar facebook / linha __ init__.py 1292+ com isso:
if params.get('expires'):
self.session_key_expires = int(params['expires'])
Para isto:
if params.get('expires'):
if params['expires'] == 'None':
params['expires'] = 0
self.session_key_expires = int(params['expires'])
Ele vai trabalhar, mas é um hack e talvez isso poderia ser feito de forma mais elegante, mas funciona.
Outras dicas
Você não deve usar @facebook.require_login()
decorador de pyfacebook ao usar pyfacebook com facebook-connect. O decorador é feito para ser usado por um aplicativo do Facebook, uma vez que redireciona o usuário para o site facebook, se não está logado, mas você realmente quer redirecionar o usuário para a página de login em seu site se eles não está logado.
Para verificar se alguém está conectado com facebook-connect e pyfacebook com o middleware djangofb, você chama request.fb.check_session(request)
. Se check_session
retorna True, então eles têm uma sessão válida. Se ela retorna False, então você precisa redirecionar o usuário para a página de login para que eles possam clicar no botão de login Connect Facebook você (deve) ter colocado nessa página.