2012-02-18 18 views
0

私は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の資格情報が要求されます。

答えて

2

理想的には、GAE/GoogleのLogOutには、userServiceから出てくるlogOutUrlを使用します。例

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

私は窓をリダイレクトする場所logOutURLは、Googleの

からログアウトする

のためにも、私は、ログインしてでログアウトするように書かれている小さなサーブレットチェック:http://cloudspring-demo.appspot.com/html/csAuth.html をあなたは、単にこのサーブレットをコピーすることができます適切なサーブレットを作成し、web.xmlでマッピングを追加した後、単にテストしてテストすることができます。

+0

Yup!働く何とか見落としてしまった。ありがとう! – Patrick

+0

さて、私はそれが動作していると思ったが、まだGoogleの資格情報を入力せずに私のアプリに再度ログインすることができます。ログインページに戻り、Googleアカウントのログインをクリックすると、アプリに直接アクセスします。それはちょうど私がやっていることかもしれません... – Patrick

+0

私はリンクを貼り付けたデモは、作業デモです。ログオンURLはクライアント/ UIに渡す必要があります。「サインアウト」をクリックすると、クライアント側でlogOutURLを呼び出す必要があります。私たちにいくつかのコードを教えてくれますか? –

関連する問題