Ruby Twitter如何授权用户?

时间:2014-10-07 09:45:13

标签: ruby ruby-on-rails-4 twitter

我有一个必须在用户页面发推文的应用。

使用gem Twitter

我有一个必须创造所有东西的动作。

def call
  client = set_client

  client.token

  client.update!("I'm tweeting with @gem!")
end

此方法创建使用API​​的客户端

def set_client
  Twitter::REST::Client.new do |config|
    config.consumer_key        = "****"
    config.consumer_secret     = "****"
    config.access_token        = "****"
    config.access_token_secret = "****"
  end
end

如果我认为正确,我需要获得用户的access_token并授权他获得权限。 但是在应用程序的设置中,我只能为我的页面获取令牌。

当我获得用户的access_token和access_token_secret时,如何实现该功能?

1 个答案:

答案 0 :(得分:3)

要获取用户的访问令牌和密码,您需要完成Twitter的3条腿授权。

Gem omniauth-twitter使这个过程变得简单,甚至在一个漂亮的railscasts教程中进行了解释

假设您已配置omniauth且UsersController包含:

def create
  user = User.from_omniauth(env["omniauth.auth"])
end

然后在用户模型中:

def self.from_omniauth(auth)
  where(auth.slice("provider", "uid")).first || create_from_omniauth(auth)
end

def self.create_from_omniauth(auth)
  create! do |user|
    user.provider = auth["provider"]
    user.uid = auth["uid"]
    user.name = auth["info"]["nickname"]
    user.access_token = auth["credentials"]["token"]
    user.access_token_secret = auth["credentials"]["secret"]
  end
end

def set_client
  Twitter::REST::Client.new do |config|
    config.consumer_key        = "****"
    config.consumer_secret     = "****"
    config.access_token        = access_token
    config.access_token_secret = access_token_secret
  end
end

更多信息:3-legged authorizationrailscasts tutorial