Google app engine 如何确定用户是否已在其他页面上注销
我正在运行一个谷歌应用程序引擎项目,每次用户采取行动时,我都想检查用户是否1)登录2)管理员。这是我为appuser提供的代码:Google app engine 如何确定用户是否已在其他页面上注销,google-app-engine,Google App Engine,我正在运行一个谷歌应用程序引擎项目,每次用户采取行动时,我都想检查用户是否1)登录2)管理员。这是我为appuser提供的代码: class AppUser { private UserService userService; private User user; public AppUser() { userService = UserServiceFactory.getUserService(); user = userSe
class AppUser
{
private UserService userService;
private User user;
public AppUser()
{
userService = UserServiceFactory.getUserService();
user = userService.getCurrentUser();
}
public IsAdministrator()
{
if(IsLoggedIn())
{
return userService.IsUserAdmin();
}
return false;
}
public IsLoggedIn()
{
return user == null;
}
}
当我用我的应用程序注销时,这一切正常。但是,如果我在另一个页面(比如谷歌日历或其他什么)上注销,应用程序仍然认为我已登录。是否有其他更好的方法检查用户是否仍在登录
我还知道,这可以通过web.xml中的安全约束来实现,但是在这种情况下这不起作用,因为如果用户已注销,我需要采取某些操作
我使用App Engine SDK 1.7和GWT SDK 2.4两种方式通知应用程序用户注销:
我今天遇到了这种情况,尽管情况更糟:我以用户A(从Google站点页面)的身份注销,并以用户B的身份登录,但我的GAE应用程序仍然认为我是以用户A的身份登录的。Argh 原因是涉及到两个cookie,一个用于跟踪哪个Google用户登录到Google,另一个用于跟踪哪个GAE应用程序用户登录到我的GAE应用程序。回想一下,GAE可以使用任何联合身份验证服务,而不仅仅是谷歌的。我的应用程序无法访问google.com cookies,因此我无法直接检查用户A是否仍在登录(或当前登录的用户) 不幸的是,我还没有找到一个直接的“联合注销”机制,尽管它可能用于检测预期用户不再登录 我发现其他人正在讨论这个问题:
# My BaseHandler has a clear_cookie
class LoginAndRedirectHandler(base_handler.BaseHandler):
def get(self):
self.clear_cookie('ACSID')
self.clear_cookie('SACSID')
self.clear_cookie('dev_appserver_login')
if 'continue' in self.request.params and \
self.request.params['continue'].startswith('/'):
url = self.request.params['continue']
else:
# Whatever your page is that needs an up to date logged in user
url = users.create_login_url('/PageB')
if isinstance(url, unicode):
url = url.encode('utf8')
logging.info('Redirecting to ' + url)
self.redirect(url)
return
我在上面很少提到的原因是,这个过程在时间上很昂贵,至少涉及4或5个重定向。目前我正在通过RCP调用(使用AppUser)检查用户是否加载了新页面。如果我没有登录,这不应该是假的吗?