2010/03/26

GAE上でのログイン・ログアウト周り [ GAE ]

前回の続き?

GAEでGoogleのユーザサービスを使うには前回の記事のようにUserServiceオブジェクトを
使ってゴリゴリします。このUserServiceオブジェクトから、ログイン・ログアウトを
実行する画面のURLを取得する事ができます。以下にJavaDocの引用を。

ログイン

createLoginURL

java.lang.String createLoginURL(java.lang.String destinationURL)
ログイン ページをユーザーに表示する場合に使用できる URL を返します。
パラメータ:
destinationURL - ログインしたユーザーをリダイレクトする場合。
戻り値:
ログイン プロンプトを表示する URL。
スローする値:
java.lang.IllegalArgumentException - destinationURL が大きすぎる場合。


ログアウト
createLogoutURL

java.lang.String createLogoutURL(java.lang.String destinationURL)
現在のユーザーがこのアプリケーションからログアウトする場合に使用できる URL を返します。
パラメータ:
destinationURL - ログアウトしたユーザーをリダイレクトする場合。
戻り値:
ユーザーがログアウトする URL。
スローする値:
java.lang.IllegalArgumentException - destinationURL が大きすぎる場合。


上記のメソッドを使用する事で簡単にログイン・ログアウト画面に遷移する事が
可能です。便利!という訳で実際に使ってみました。


■ログイン
前回のポストと全く同じですが、ServletのdoGetメソッドに以下のようなコードを用意します。

UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();

if (user != null) {
 resp.setContentType("text/plain");
 resp.getWriter().println("Hello, " + user.getNickname());

} else {
 resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
}

これでログイン時はGoogleアカウントのニックネームが表示され、未ログイン時は
ログイン画面が表示されるはずです。早速アクセスしてみると…



表示されました。特に何も用意せず、かえってきた値に遷移すればログインできるっていうのは
便利ですね。ただ便利な反面、GAEでGoogleアカウントにログインする画面はこの画面固定って
事なんでしょうかね。デザインいじれないのが逆に痛いかも。

■ログアウト
今度は先程のコードをこんなふうに変更してみました。

UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();

if (user != null) {
 //resp.setContentType("text/plain");
 //resp.getWriter().println("Hello, " + user.getNickname());
 resp.setContentType("text/html");
 resp.getWriter().println("You can <a href=" + userService.createLogoutURL(req.getRequestURI()) +">Sign out</a>");
} else {
 resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
}

これにより、まず最初は先程と同じようにログイン画面が表示されます。



ここでログインボタンを押すと・・・



ログアウトのリンクが表示され、それをクリックすると・・・



戻ってきました。無事ログアウト完了。ここで一つ、ログインログアウトともに
メソッドの引数にStringがありましたよね?

>>java.lang.String createLoginURL(java.lang.String destinationURL)
>>java.lang.String createLogoutURL(java.lang.String destinationURL)
このパラメータの文字列に渡す値ですが、JavaDocによるとログイン・ログアウト
完了後にリダイレクトするアドレスのようです。
例えば、ショピングモール系であればログイン完了後に当初見ていた商品のページに
遷移させる、または個人の管理ページに遷移させる・・・
ログアウト完了後にログアウト確認画面に遷移、またはトップページに遷移させる・・・
といった使い方ができるみたいですね。
今回はテストのためにリクエストのURLをそのまま返すようにコーディングしてあります。

Googleのユーザ情報の使い方はだいたいわかったのでそろそろデータストアの
勉強に入りたい所です。

0 件のコメント: