2012-02-18 59 views
0

我有一个GWT前端的appengine应用程序。我正在使用appengine的用户服务来验证谷歌帐户。我的问题是从GWT前端注销时,用户没有完全注销。用户会显示登录页面,但是当您单击并使用谷歌帐户重新登录时,它会直接进入应用程序,而无需转到Google登录页面。我没有在这里使用任何自定义的登录/传递字段,严格appengine用户服务。Appengine用户服务+ GWT不注销

我猜这与HTTP会话和基本身份验证有关,但我无法完全注销。

这里是服务器上的登录/退出服务:

import javax.servlet.http.HttpSession; 

import com.google.gwt.user.server.rpc.RemoteServiceServlet; 

@SuppressWarnings("serial") 
public class LoginServiceImpl extends RemoteServiceServlet implements 
LoginService { 
    public final static String CHANNEL_ID = "channel_id"; 

    @Override 
    public UserAccountDTO getLoggedInUserDTO() { 
    UserAccountDTO userDTO; 
    HttpSession session = getThreadLocalRequest().getSession(); 

    UserAccount u = LoginHelper.getLoggedInUser(session, null); 
    if (u == null) 
     return null; 
     userDTO = UserAccount.toDTO(u); 
     UserService userService = UserServiceFactory.getUserService(); 
     userDTO.setLogoutURL(userService.createLogoutURL(requestUri)); 
    return userDTO; 
    } 

    @Override 
    public void logout() throws NotLoggedInException { 
    getThreadLocalRequest().getSession().invalidate(); 
    throw new NotLoggedInException("Logged out"); 
    } 

} 

在GWT客户端我使用此代码注销:

Window.Location.assign(currentUserDTO.getLogoutURL()); 

当我点击注销链接我应用程序(运行上面的代码),没有任何变化。但是,如果我将页面重新加载到我的应用程序的登录页面。当我点击登录我的谷歌帐户时,它会直接进入我的应用程序,而不会要求提供Google凭据。这告诉我用户已从我的appengine应用程序注销,但用户仍然以某种方式在浏览器中登录到他的谷歌帐户(我假设认证令牌存储为cookie?)。我需要让我的用户完全注销该Google帐户,以便该网站的下一位访问者获得Google凭据。

回答

2

理想情况下来自GAE/Google的LogOut我会使用从userService出来的logOutUrl。例如

UserService userService = UserServiceFactory.getUserService(); 
logOutURL = userService.createLogoutURL(baseURL); 

logOutURL是在那里我会重定向窗口,从谷歌

注销

还要检查小的servlet我写登录和注销在:http://cloudspring-demo.appspot.com/html/csAuth.html 你可以简单地这个servlet中复制适当的servlet并在web.xml中添加映射后,可以简单地调用它来测试。

+0

是!作品。以某种方式忽略了这一点。谢谢! – Patrick 2012-02-21 03:40:22

+0

嗯,我认为这是工作,但仍然能够登录到我的应用程序与输入谷歌凭据。它会返回到我的登录页面,当我点击登录与谷歌帐户,它会直接到应用程序。这可能只是我正在做的事... – Patrick 2012-02-21 17:23:23

+0

我粘贴链接的演示是一个工作演示。 logput的URL是你必须传递给你的客户端/用户界面的,当点击“注销”时,你必须在客户端调用logOutURL。你能告诉我们一些代码吗? – 2012-02-21 17:25:33