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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top