Constants.GOOGLE_PROJECT_CLIENT_SECRET,
code,
"postmessage").execute();
// トークン情報の取得(アクセストークン、リフレッシュトークン・・・)
GoogleCredential credential = new GoogleCredential.Builder()
.setJsonFactory(JSON_FACTORY)
.setTransport(TRANSPORT)
.setClientSecrets(Constants.GOOGLE_PROJECT_CLIENT_ID, Constants.GOOGLE_PROJECT_CLIENT_SECRET).build()
.setFromTokenResponse(tokenResponse);
// ---------------------------------------------------------
// トークン情報の有効チェック
// ---------------------------------------------------------
// トークンの有効チェック
Oauth2 oauth2 = new Oauth2.Builder(
TRANSPORT, JSON_FACTORY, credential)
.setApplicationName(Constants.GOOGLE_APPLICATION_NAME).build();
Tokeninfo tokenInfo = oauth2.tokeninfo()
.setAccessToken(credential.getAccessToken()).execute();
// トークン情報にエラーがあれば、中断すしま。
if (tokenInfo.containsKey("error")) {
throw new Exception();
}
// 受け取ったトークンが自分のアプリのものであることを確認します。
if (!tokenInfo.getIssuedTo().equals(Constants.GOOGLE_PROJECT_CLIENT_ID)) {
throw new Exception();
}
// ユーザー情報の取得
UserModel userModel = UserService.getOrNull(tokenInfo.getUserId());
if(userModel != null) {
// ---------------------------------------------------------
// ユーザーログイン
// ---------------------------------------------------------
// ログインユーザーのアクセストークンとリフレッシュトークンを更新
if(credential.getAccessToken() != null && !credential.getAccessToken().isEmpty()) {
userModel.setAccessToken(credential.getAccessToken());
}
if(credential.getRefreshToken() != null && !credential.getRefreshToken().isEmpty()) {
userModel.setRefreshToken(credential.getRefreshToken());
}
UserService.put(userModel);
}