前两天想为推特中文圈添加OAuth登陆的功能,因为我整个站用的是twitter4j,所以必须得用twitter4j提供的方法去进行 OAuth登陆,但是twitter4j官方站的例子实在太诡异了,而且是针对java应用程序的例子而不是J2EE的例子,看了半天都没法把它转到 J2EE上来,网上搜了挺久也没有相关教程可以模仿,OAuth方式登录实在是够迷惑人的,两种tonke很容易就混了,源代码也很复杂看不懂,实在是折腾死人,但最终还是折腾出来了,虽然可能做twitter应用的人不多,用twitter4j做twitter应用的人更不多,但还是分享下 twitter4j的OAuth登陆方法吧。我也不太懂里面的运行原理,只把我的用法写出来。
初始页面:
Twitter twitter = new Twitter(); //OAuth有两种Token,分别是RequestToken和AccessTonke。 //通过OAuth Consumer的key和secret就可以获取RequestTokenKey和RequestTokenSecret: twitter.setOAuthConsumer("[your consumer key]", "[your consumer secret]"); RequestToken requestToken = twitter.getOAuthRequestToken(); String token = requestToken.getToken(); String tokenSecret = requestToken.getTokenSecret(); //先保存两个requestToken Utility.setCookie("tonke",token,false,response); Utility.setCookie("tokenSecret",tokenSecret,false,response); //跳转到Twitter OAuth验证页面 response.sendRedirect(requestToken.getAuthorizationURL());
另一个页面上,也就是Twitter OAuth认证后返回的页面:
Twitter twitter = new Twitter(); twitter.setOAuthConsumer("[your consumer key]", "[your consumer secret]"); //获取之前保存的requestTokenKey和requestTokenSecret String token = Utility.getCookie("tonke", request); String tokenSecret = Utility.getCookie("tokenSecret", request); //通过requestTokenKey和requestTokenSecret获得accessToken,包含了accessTokenKey和accessTokenSecret AccessToken accessToken = twitter.getOAuthAccessToken(token, tokenSecret); //把accessToken给twitter,twitter这个实例就算登陆了,效果等同于twitter = new twitter("name","password") twitter.setOAuthAccessToken(accessToken); //在这里就可以updateStatus了 twitter.updateStatus("OAuth登陆成功"); //把accessTokenKey和accessTokenSecret保存起来,下次就不用再验证了 Utility.setCookie("accessToken",accessToken.getToken(), true, response); Utility.setCookie("accessTokenSecret", accessToken.getTokenSecret(), true,response);
在其他页面上,只要把之前保存的accessTokenKey和accessTokenSecret传给twitter就行了:
twitter = new Twitter(); twitter.setOAuthConsumer(ConsumerKey, ConsumerScret); AccessToken accessToken = new AccessToken(Utility.getCookie("accessToken", request), Utility.getCookie("accessTokenSecret", request)); twitter.setOAuthAccessToken(accessToken); twitter.updateStatus("OAuth登陆成功");
评论
深有同感,看了你这篇文章我就少走弯路了,多谢!
我有一个新浪的客户端,现在用OAuth和普通登陆共存,但是OAuth登陆每次都要去新浪网页上授权,能否做到保存授权下次自动登陆呢,第一次接触OAuth,请多指教
- 开源 php版twitese (130)
- 推特中文圈 (62)
- 空间被封过程 (48)
- 关于 (33)
- 我心目中的毛泽东 (29)
评论最多的文章
正要研究这个。。正好