2014年11月13日木曜日

Slim3とTwitter4JでTwitter認証

コレは何?

タイトルの通りSlim3上でTwitter4Jを使いTwitter認証を通す方法です。

基本はsinmetalさんのブログ記事と似ていますが、そのままではなぜか動かなかったため微修正。


public class AuthController extends Controller {
@Override
public Navigation run() throws Exception {
// コンシューマーキー、コンシューマーシークレットを設定
// twitter4j.propertiesを使用する方法わからず…
final String consumerKey = CONSUMER_KEY;
final String consumerSecret = CONSUMER_SECRET;
// Twitterインスタンス生成
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setOAuthConsumerKey(consumerKey).setOAuthConsumerSecret(consumerSecret)
.setOAuthAccessToken(null).setOAuthAccessTokenSecret(null);
TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = tf.getInstance();
// コールバック用に保持
sessionScope("twitter", twitter);
// コールバックURL取得
StringBuffer callbackUrl = request.getRequestURL();
int index = callbackUrl.lastIndexOf("/");
callbackUrl.replace(index, callbackUrl.length(), "").append("/callback");
try {
// リクエストトークン発行
RequestToken requestToken = twitter.getOAuthRequestToken(callbackUrl.toString());
// コールバック用に保持
sessionScope("requestToken", requestToken);
// 認証URLへリダイレクト
// Controller.redirect()を使用するとリダイレクトループが発生する模様
response.sendRedirect(requestToken.getAuthenticationURL());
return null;
} catch (TwitterException e) {
throw new ServletException(e);
}
}
}
public class CallbackController extends Controller {
@Override
public Navigation run() throws Exception {
Twitter twitter = (Twitter) sessionScope("twitter");
RequestToken requestToken = (RequestToken) sessionScope("requestToken");
String verifier = asString("oauth_verifier");
try {
twitter.getOAuthAccessToken(requestToken, verifier);
removeSessionScope("requestToken");
} catch (TwitterException e) {
e.printStackTrace();
}
return null;
}
}

0 件のコメント:

コメントを投稿