私はGWTフロントエンドを持つappengineアプリを持っています。 appengineのユーザーサービスを使用してGoogleアカウントで認証しています。私の問題は、ユーザーが完全にログアウトしていないGWTフロントエンドからログアウトするときです。ユーザーにはログインページが表示されますが、クリックしてgoogleアカウントに再度ログインすると、Googleログインページに行くことなくアプリに直接アクセスできます。私はここにカスタムログイン/パスのフィールドを使用していない、厳密にはユーザーサービスをappengineしています。Appengineユーザサービス+ GWTがログアウトしない
私はこれがHTTPセッションと基本認証と関係があると推測していますが、完全にログアウトすることはできませんでした。私はログアウトし、このコードを使用していますGWTのクライアント側で
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");
}
}
:ここ
は、サーバー上のログイン/アウトサービスです
Window.Location.assign(currentUserDTO.getLogoutURL());
私は私の上のログアウトリンクをクリックすると、 app(上記のコードを実行します)は何も変わりません。しかし、ページをリロードすると、私は自分のアプリのログインページに送られます。 Googleアカウントでログインするときにクリックすると、Googleの資格情報を要求せずにアプリに直接アクセスできます。これはユーザーが私のappengineアプリからログアウトしたことを示していますが、ユーザーはブラウザのGoogleアカウントに何らかの形でログインしています(認証トークンがCookieとして保存されていると仮定しています)。ユーザーのGoogleアカウントを完全にログアウトさせる必要があるため、サイトの次の訪問者にGoogleの資格情報が要求されます。
Yup!働く何とか見落としてしまった。ありがとう! – Patrick
さて、私はそれが動作していると思ったが、まだGoogleの資格情報を入力せずに私のアプリに再度ログインすることができます。ログインページに戻り、Googleアカウントのログインをクリックすると、アプリに直接アクセスします。それはちょうど私がやっていることかもしれません... – Patrick
私はリンクを貼り付けたデモは、作業デモです。ログオンURLはクライアント/ UIに渡す必要があります。「サインアウト」をクリックすると、クライアント側でlogOutURLを呼び出す必要があります。私たちにいくつかのコードを教えてくれますか? –