【发布时间】:2012-03-09 18:22:14
【问题描述】:
我有一个带有 GWT 前端的 appengine 应用。我正在使用 appengine 的用户服务对谷歌帐户进行身份验证。我的问题是从 GWT 前端注销时,用户没有完全注销。用户会看到登录页面,但是当您单击以使用 google 帐户再次登录时,它会直接进入应用程序,而无需进入 google 登录页面。我在这里没有使用任何自定义登录/密码字段,严格来说是 appengine 用户服务。
我猜这与 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());
当我单击我的应用程序(运行上面的代码)上的注销链接时,没有任何变化。但是,如果我重新加载页面,我将被发送到我的应用程序的登录页面。当我单击以使用我的谷歌帐户登录时,它会直接进入我的应用程序,而无需询问谷歌凭据。这告诉我用户已从我的 appengine 应用程序中注销,但是用户仍然以某种方式在浏览器中登录到他的谷歌帐户(我假设身份验证令牌存储为 cookie?)。我需要让我的用户完全退出那里的 google 帐户,以便该网站的下一位访问者被要求提供 google 凭据。
【问题讨论】:
标签: google-app-engine gwt authentication