私はWebアプリケーションを作成していて、ユーザーがSpring-social-(core / twitter)を使用してTwitter経由でサインインできるように実装しました。
ただし、Twitterの動作はおかしいです。最初の認証/承認後、認証のためにユーザーをTwitterに送信するたびに、Twitterはアプリケーションを再度承認するように求めます。接続されているTwitterプロファイルを調べました。私のアプリはそこにあり、正しく承認されています(私の場合は読み取りアクセス用)。
追加の権限を要求するケースはありません。私のアプリケーションに必要なのは読み取りアクセスだけです(認証ダイアログでこれを確認します)。
OAuth1Operations
(によって返される)を使用TwitterConnectionFactory
してOAuthダンスを実行し、結果の接続をデータベースに保存しています。私のフロントエンドはWicket1.5で書かれています。
Twitter経由でサインインしたいときに、アプリを何度も再承認するだけでこの動作を回避できますが、これは非常に厄介です。誰かが私がここで欠けているものを知っていますか?
これが私のコードです:
TwitterConnectionFactory connectionFactory = (TwitterConnectionFactory) connectionFactoryLocator.getConnectionFactory(Twitter.class);
String callbackUrl = [...];
if (pageParameters.get("oauth_token").isNull() || pageParameters.get("oauth_verifier").isNull()) {
MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
params.add("x_auth_access_type", "read");
OAuthToken token = connectionFactory.getOAuthOperations().fetchRequestToken(callbackUrl, params);
String url = connectionFactory.getOAuthOperations().buildAuthorizeUrl(token.getValue(), OAuth1Parameters.NONE);
getSession().setAttribute("twitter_token", token);
setResponsePage(new RedirectPage(url));
} else {
String token = pageParameters.get("oauth_token").toString();
String verifier = pageParameters.get("oauth_verifier").toString();
OAuthToken previousToken = (OAuthToken) getSession().getAttribute("twitter_token");
if (previousToken.getValue().equals(token)) {
AuthorizedRequestToken authorizedRequestToken = new AuthorizedRequestToken(previousToken, verifier);
OAuthToken accessToken = connectionFactory.getOAuthOperations().exchangeForAccessToken(authorizedRequestToken, null);
Connection<Twitter> connection = connectionFactory.createConnection(accessToken);
}
}