2010-01-11 72 views
4

我正在嘗試使用應用程序引擎補丁和pyFacebook編寫一個facebook應用程序。 我只使用每個工具提供的示例,但由於某種原因它不起作用。應用程序引擎補丁和pyFacebook不工作

我已合併兩個就像在接受answet說明如下: Facebook, Django, and Google App Engine

應用程序引擎補丁似乎工作得很好,但是當我嘗試使用@ 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' 

這happends無論哪查看我@ facebook.require_login()

裝點我使用兩個項目最新的,我不知道爲什麼它不會工作。

非常感謝您的時間。

更新:我做了一個pyfix的quickfix,但我忘了把它放回線程中。

現在也作爲答案,因爲它似乎是唯一的方法。

如果更改此的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開發者指向這個主題,也許他們會有更好的解決方案。

+0

我遇到同樣的問題。在示例AEP應用程序的目錄結構中,您是否放置了Py Facebook的東西? – Bialecki 2010-01-11 02:42:59

+0

哦,順便說一下,這種情況發生的原因是Facebook代碼預期爲None的瀏覽器cookie設置爲字符串「None」,然後嘗試解析。我不知道爲什麼cookie被設置或錯誤是什麼,放這就是爲什麼它發生。你會發現如果你清除你的cookies,然後打你的網站,它會突然重定向到Facebook。這並沒有解決問題,但它是更多的信息。 – Bialecki 2010-01-11 02:45:52

+0

我把facebook目錄放在AEP樣本目錄的根目錄下。 正如鏈接中所述,他們似乎能夠使其工作。 感謝您提供cookie的提示,將盡量對它稍作修改。 – 2010-01-11 14:17:11

回答

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']) 

它會工作,但它是一個黑客,也許它可以做更優雅,但它的作品。

1

使用facebook-connect使用pyfacebook時,不應該使用pyfacebook的裝飾器@facebook.require_login()。裝飾器的目的是用於Facebook應用程序,因爲它將用戶重定向到Facebook網站,如果他們沒有登錄,但你真的想要重定向用戶到你的網站登錄頁面,如果他們沒有登錄。

要檢查是否有人使用djangofb中間件與facebook-connect和pyfacebook一起登錄,請致電request.fb.check_session(request)。如果check_session返回True,那麼它們有一個有效的會話。如果返回False,則需要將用戶重定向到登錄頁面,以便他們可以單擊您(應該)放置在該頁面上的Facebook連接登錄按鈕。

+0

那麼我使用它來製作一個Facebook應用程序,但我使用IFrame設置,所以我猜它只是表現爲一個Facebook連接網站? – 2010-01-11 14:13:30

相關問題