前回の続き?
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 件のコメント:
コメントを投稿