4

app-engine-patchとpyFacebookを使用してFacebookアプリを作成しようとしています。私は各ツールで提供されている例だけを使用していますが、何らかの理由で機能しません。

ここで受け入れられている回答に記載されているように、 Facebook、Django、およびGoogleAppEngineの2つを組み合わせました。

app-engine-patchは問題なく機能しているようですが、@ facebook.require_login()を使用しようとすると、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'

これは、@ facebook.require_login()でどのビューを装飾しても発生します

私は両方のプロジェクトの最新のものを使用していますが、なぜそれが機能しないのかわかりません。

お時間をいただき、ありがとうございました。

更新: pyFacebookのクイックフィックスを作成しましたが、スレッドに戻すのを忘れていました。

それが唯一の方法のように思われるので、今も答えとして。

facebook / __ init__。py行1292+をこれから変更した場合:

    if params.get('expires'):
        self.session_key_expires = int(params['expires'])

これに:

    if params.get('expires'):
        if params['expires'] == 'None':
            params['expires'] = 0   
        self.session_key_expires = int(params['expires'])

それは機能しますが、それはハックであり、おそらくもっとエレガントに行うことができますが、それは機能します。pyFacebookの開発者にこのスレッドを紹介する必要があります。おそらく彼らはより良い解決策を持っているでしょう。

4

2 に答える 2

1

@facebook.require_login()facebook-connectでpyfacebookを使用する場合は、pyfacebookのデコレータを使用しないでください。デコレータは、ログインしていない場合はユーザーをFacebookサイトにリダイレクトするため、Facebookアプリケーションで使用することを目的としていますが、ログインしていない場合は、ユーザーをサイトのログインページにリダイレクトする必要があります。

誰かがfacebook-connectでログインしているかどうか、およびdjangofbミドルウェアでpyfacebookにログインしているかどうかを確認するには、を呼び出しますrequest.fb.check_session(request)check_sessionTrueを返す場合、有効なセッションがあります。Falseが返された場合は、ユーザーをログインページにリダイレクトして、そのページに配置したFacebook接続ログインボタンをクリックできるようにする必要があります。

于 2010-01-11T05:07:51.917 に答える
1

facebook / __ init__。py行1292+をこれから変更した場合:

    if params.get('expires'):
        self.session_key_expires = int(params['expires'])

これに:

    if params.get('expires'):
        if params['expires'] == 'None':
            params['expires'] = 0   
        self.session_key_expires = int(params['expires'])

それは機能しますが、それはハックであり、おそらくもっとエレガントに行うことができますが、それは機能します。

于 2010-03-06T22:22:17.270 に答える