我有一个客户端测试应用程序和一个服务器应用程序,都在GAE上托管。客户端是一个简单的Web前端,服务器托管受Oauth保护的资源。身份验证是通过OpenId进行的,应用程序支持联合登录。问题是,在用户登录后,userService似乎忘记了他们是谁(浏览器有一个ACSID cookie,因此它会记住)。
这是流程(来自GAE日志).... 用户首先在浏览器中输入cktestclient.appspot.com(客户端应用程序)并按ShowMyCommitments按钮。然后在服务器端日志(commitkeeperapi.appspot.com)中看到以下内容。
上午9:10:22:/ oauth / authorize?response_type = code& client_id = webappclient& redirect_uri = http://cktestclient.appspot.com/client/showStartPage&scope=CommitKeeper_Access 我们尚未登录,因此我们将重定向 上午9:10:22:/ login /?continue = http://commitkeeperapi.appspot.com/oauth/authorize?response_type=code&client_id=webappclient&redirect_uri=http://cktestclient.appspot.com/client/showStartPage&scope=CommitKeeper_Access 然后我使用createLoginURL生成的URL登录
上午9:10:33:/ oauth / authorize?response_type = code& client_id = webappclient& redirect_uri = http://cktestclient.appspot.com/client/showStartPage&scope=CommitKeeper_Access OAuth舞蹈继续,我们看到我们有一个登录用户 com.fourspires.api.server.MyGaeAuthenticator authenticate:当前用户(来自userService)是:richardlandis@gmail.com
上午9:10:34:/ oauth / access_token 更多Oauth Dancing ...获取oAuthToken,返回客户端cktestclient.appspot.com:/client/showStartPage - 继续拨打电话:commitkeeperapi.appspot.com:/v3/commitments
上午9:10:34:/ oauth / validate 跳舞......验证随承诺请求发送的oAuthToken
上午9:10:36:/ v3 / commitment /?oauth_token = 9491caca6c9ad2b2cb2d20a5cf2773ce22b99e076ff0dcb3a47d06e6a26038d5ccf63c66f1f2387e
现在我们回到服务器代码,我们检查用户 - 它是空的!
com.fourspires.api.util.UserHelpers getCurrentUser:UserServiceFactory.getUserService()。getCurrentUser()= null
基于回顾我在这个问题上的所有线程,我在服务器的appengine-web.xml中添加了true,但没有任何改变。
有谁知道为什么UserService已经忘记了我的用户?我有一个解决这个问题的方法,但我有兴趣了解更多关于这个失败的原因。
PS - 这似乎与GWT and AppEngine User Service非常相似,但似乎没有得到解决。
答案 0 :(得分:0)
我认为答案是因为我提出的两个请求是由不同的ApiProxy处理的,这些ApiProxy具有不同的环境,因此对当前用户的不同理解。我不确定为什么我会得到两个不同的ApiProxys,但我可以对此进行进一步调查。