2011-03-14 74 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 - 确保如果用户没有登录,他会,然后重定向到我需要的任何地方。

相关问题