2011-03-14 38 views
0

我有一個GAE應用程序,在我的瀏覽器中工作得很好,但當我嘗試在iphone上運行同一網站時無法弄清用戶。 我使用的是當前USER_ID發送消息的通道APIGAE用戶身份驗證不適用於iphone for channel_API

這是代碼在我的Python GAE應用程序 - 這裏有兩個DEFS - send_update,並send_update_iphone - 當你看到他們是完全相似!兩者都是在Class更新():

Updater(): 
    def send_update(self): 
     message = self.get_fetch_message() 
     user = users.get_current_user() 
     channel.send_message(user.user_id()+user.user_id(),message) 



    #for iphone - no user yet... 
    def send_update_iphone(self): 
     message = self.get_fetch_message() 
     user = users.get_current_user() 
     channel.send_message(user.user_id()+user.user_id(),message) 

現在,我稱他們來自不同的地方,我把第一

Updater().send_update() 

和第二

Updater().send_update_iphone() 

當我使用第一個應用程序可以很好地工作 - 它可以打開頻道,並且可以在沒有問題的情況下更新消息。 當我到該應用從iphone(同時登錄到我的Gmail)我得到:

「NoneType」對象有沒有屬性「USER_ID」

一些細節的iPhone側: - 我從UIWebView進入網站 - 我可以看到我登錄到我的谷歌賬戶

有人可以幫忙嗎?我嘗試了我所知道的東西>>>謝謝!

更新:我查了餅乾(感謝卡爾文),發現在瀏覽器上我得到一個cookie,但在iphone我沒有得到一個cookie(我用NSLog(@"Cookies: %@", [request1 responseCookies]);

我現在知道它的工作原理是瀏覽器,因爲我從我的瀏覽器進入myapp.appspot.com頁面,所以這就是爲什麼它有cookie,而從iphone我POST到myapp.appspot.com,但我從來沒有進入頁面本身,所以服務器從不向我發送cookie。 這是有趣的,但我還是不知道怎麼解決...

+0

您應該打印出每種情況下設置的cookie。我認爲在應用程序中使用UIWebView會爲您提供來自Mobile Safari的一組單獨的Cookie。此外,登錄的Gmail用戶是否會通過App Engine登錄提示?這就是get_current_user使用的cookie的設置。 – Calvin 2011-03-14 19:15:06

+0

嗨,我檢查了餅乾 - 將更新問題。 – 2011-03-16 08:52:59

+0

但App Engine登錄提示是什麼?你的意思是我應該從gae獲得一個「登錄」頁面嗎?因爲我沒有,而且我使用GAE文檔中顯示的登錄方法和重定向等方法。也許您對我可以使用的登錄方法有不同的示例? – 2011-03-16 08:54:31

回答

1

我發現了什麼問題:在iPhone沒有爲用戶進行身份驗證,因爲我忘了把「if not user:

self.redirect(users.create_login_url(self.request.uri)) 

在我所要求的iphone直接到(myapp.appspot.com/iphone)的頁面所以當然在沒有用戶的user.get_current_user()答道:

「NoneType」對象沒有屬性'user_id'

我現在所做的是我首先加載UIWebView去myapp.appspot.com/iphone - 確保如果用戶沒有登錄,他會,然後重定向到我需要的任何地方。