我只是对Google应用引擎的用户服务如何运作感到好奇。我理解它的方式,登录状态的用户存储在cookie中。要获取cookie,必须有一个http servlet请求对象(至少对于java servlet)。但是用户服务api不需要任何http servlet请求作为输入,那么如何让cookie检查用户是否已登录?
添
答案 0 :(得分:3)
在请求期间,用户通过Google的servlet实现设置is handled。
[我]用户登录并使用标准servlet API获取用户的电子邮件地址或OpenID标识符,并使用请求对象的getUserPrincipal()方法。
在登录过程中,服务使用重定向,类似于OpenID或OAuth。在整个登录过程中查看URL。
用户会在您的应用上重定向到由App Engine处理的网址,例如:
http://app.appspot.com/_ah/login?continue=http://app.appspot.com/dosomething
登录处理程序重定向到Google登录服务,例如:
https://www.google.com/accounts/ServiceLogin?service=ah&continue=http://app.appspot.com/_ah/login%3Fcontinue%3Dhttp://app.appspot.com/dosomething<mpl=gm&ahname=Your+App+Name&sig=hf3322hdsk98fd8fh3u29hfh24as
您登录后,Google会将您重定向回应用引擎登录处理程序:
http://app.appspot.com/_ah/login?continue=http://app.appspot.com/dosomething
当Google重定向时,一些查询参数将传递给App Engine登录处理程序,内置登录处理程序将设置cookie。
然后,您将被重定向到您指定的URL或“开始”的位置。类似的东西:
http://app.appspot.com/dosomething
答案 1 :(得分:3)
后续电话怎么样?例如(从第4点开始)
在servlet dosoemthingelse中,我可以再次像这样调用UserService
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
String userId = user.getUserId();
此userService实例如何获取cookie以了解谁是当前登录的用户?