我有一个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凭据。
是!作品。以某种方式忽略了这一点。谢谢! – Patrick 2012-02-21 03:40:22
嗯,我认为这是工作,但仍然能够登录到我的应用程序与输入谷歌凭据。它会返回到我的登录页面,当我点击登录与谷歌帐户,它会直接到应用程序。这可能只是我正在做的事... – Patrick 2012-02-21 17:23:23
我粘贴链接的演示是一个工作演示。 logput的URL是你必须传递给你的客户端/用户界面的,当点击“注销”时,你必须在客户端调用logOutURL。你能告诉我们一些代码吗? – 2012-02-21 17:25:33