Google App Engine / Java (GAE/J) で GoogleアカウントAPIを使う
Google App Engine/Java (以下 GAE/J) のアプリケーションから、Googleアカウントを持つユーザを認証できます。
今のところ、主に出来る事は、コレくらいです
・ログイン/ログアウトのチェック、認証ページURL/ログアウトURLの取得
・ログインの場合Userオブジェクトから、メールアドレス、ニックネーム、管理者か否か?の取得
ログイン状態のチェックは、Google App Engine – Google Codeのマニュアルのサンプルに有るとおり、至って簡単です。
こんな感じ。
package mypackage;
import javax.servlet.http.*;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException
{
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
String thisURL = req.getRequestURI();
boolean loginStat = false;
String urlLoginOut = null;
if (user != null) {
loginStat = true;
urlLoginOut = userService.createLogoutURL(thisURL);
} else {
loginStat = false;
urlLoginOut = userService.createLoginURL(thisURL);
}
System.out.println("urlLoginOut:"+urlLoginOut);
.
.
.
}
}
実際には、取得したUserオブジェクトを永続化して、会員情報を保存したり出来ないと使い物にならない場合が多いと思います。
App Engine データストアへの保存はサポートされるようですが、Google App Engine – Google Codeのマニュアルによると、現時点では、識別子としてのメールアドレスの一貫性が担保出来ない様です。
ユーザーとデータストア
App Engine データストアは、Google アカウント API が特別な値タイプとして返す User オブジェクトの格納をサポートしています。この記事の執筆時には、User 値はユーザーの安定した識別子として動作していません。アプリケーションがユーザー値を保存している間に、ユーザーがメールアドレスを変更した場合、User 値は有効なユーザーを参照できなくなります。実際には、ユーザーはめったに Google アカウントのメール アドレスを変更することはありませんが、この点を考慮して設計すべきです。今後のサービス更新により、データストアの User 値が自動的に更新されるようになる予定です。それまでは、User 値の正確さに依存しない方がよいでしょう。
Java API では現在、メール アドレス以外の一意なユーザー ID を取得できません。
今後のバージョンアップに期待です。