Twitter でサインインする機能を自分の Web サイトに追加しようとしていますが、うまくいきません。私はtwitter4j APIを使用しています。twitter4j サイトには、サインイン ワークフローを正確に示すサンプル コードがあります。このコードを使用しようとしましたが、(少なくとも私にとっては) 特定のステップでは機能しません!
ユーザーがアプリケーションへのアクセスを許可する Twitter 検証ページにリダイレクトする LoginServlet があります。これは doGet コードです:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
TwitterFactory twitterFac = new TwitterFactory();
Twitter twitter = twitterFac.getInstance();
twitter.setOAuthConsumer("<consumer_key>", "<consumer_secret>");
request.getSession().setAttribute("twitter", twitter);
try {
RequestToken requestToken = twitter.getOAuthRequestToken("http://127.0.0.1:8080/AllMusicWeb/CallbackServlet");
request.getSession().setAttribute("requestToken", requestToken);
response.sendRedirect(requestToken.getAuthenticationURL());
} catch (TwitterException e) {
throw new ServletException(e);
}
}
ご覧のとおり、twitter オブジェクトとリクエスト トークンは http パケットに保存されます (少なくとも、getSession.setAttribute メソッドはそうしていると思います)。
次に、Twitter ページが私のアプリケーション (CallbackServlet) のページにリダイレクトされます。これはすべて正しく実行されます。
次に、CallbackServlet には次の doGet メソッドがあります。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Twitter twitter = (Twitter) request.getSession().getAttribute("twitter");
RequestToken requestToken = (RequestToken) request.getSession().getAttribute("requestToken");
String verifier = request.getParameter("oauth_verifier");
try {
twitter.getOAuthAccessToken(requestToken, verifier);
request.getSession().removeAttribute("requestToken");
} catch (TwitterException e) {
throw new ServletException(e);
}
response.sendRedirect("<other_page>");
}
CallbackServlet は、(メソッド getSession().getAttribute() を使用して) LoginServlet に保存された twitter と requestToken を取得しようとします。問題はここにあります: twitter オブジェクトは常に null です!
コードサンプルとまったく同じように例に従っているので、うまくいくと思っていました。
どんな助けでもいただければ幸いです
前もって感謝します。