oauth for twitter

02 Dec 2009

twitter是Twitter的ruby gem,它提供了两种身份验证的方法,一是oauth,二是http auth。http auth非常简单,只要提供账号和密码就可以了,而oauth就稍微复杂一些了。

首先,你需要到http://twitter.com/oauth_clients去注册你的应用,并得到相应的consumer token和consumer secret。

接着就可以使用twitter gem了

def oauth
  oauth = Twitter::OAuth.new(consumer_token, consumer_secret)
  request_token = oauth.set_callback_url 'http://www.huangzhimin.com/'
  session[:rtoken] = request_token.token
  session[:rsecret] = request_token.secret

  redirect_to request_token.authorize_url
end

注意,这里除了传入consumer_token和consumer_secret之外,还设置了callback_url,它表示twitter身份验证完毕之后返回的页面。

然后就是跳转到authorize_url,你会进入twitter的验证页面,点击Allow之后,将跳转到之前设置的callback_url页面

def callback
  oauth = Twitter::OAuth.new(consumer_token, consumer_secret)
  oauth.authorize_from_request(session[:rtoken], session[:rsecret], params[:oauth_verifier])
  session[:rtoken] = nil
  session[:rsecret] = nil
  session[:atoken] = oauth.access_token.token
  session[:asecret] = oauth.access_token.secret
end

可以看到通过返回的oauth_verifier,我们就完成了twitter的身份验证,在记录了session[:atoken]和session[:asecret]之后就可以使用twitter的提供的接口,比如

oauth = Twitter::OAuth.new(consumer_token, consumer_secret)
oauth.authorize_from_access(session[:atoken], session[:asecret])
client = Twitter::Base.new(oauth)
client.update('twitter oauth test')

Tags 


blog comments powered by Disqus