从Rails应用程序发推文

时间:2014-04-30 15:55:22

标签: ruby-on-rails twitter devise omniauth

我已经为用户设置了Devise和Omniauth,可以通过电子邮件,Twitter和Facebook登录。我不是试图允许用户从应用程序内部发送消息。

我目前正在使用以下代码,但它只发布在我的推特帐户中。我假设这与未正确设置Oauth_token有关。无论哪个帐户登录到应用程序,它仍然来自我的帐户。

在我的用户模型中,我有以下代码(我已经更改了我的密钥和令牌)...

def self.find_for_twitter_oauth(auth, signed_in_resource=nil)
      user = User.where(:provider => auth.provider, :uid => auth.uid).first
      if user
        return user
      else
        registered_user = User.where(:email => auth.uid + "@twitter.com").first
        if registered_user
          return registered_user
        else

          user = User.create(full_name:auth.extra.raw_info.name,
                              provider:auth.provider,
                              uid:auth.uid,
                              email:auth.uid+"@twitter.com",
                              oauth_token:auth.credentials.token,
                              oauth_secret:auth.credentials.secret,
                              password:Devise.friendly_token[0,20],
                            )
        end

      end
    end

    def tweet(tweet)
      client = Twitter::REST::Client.new do |config|
        config.consumer_key        = "XXXXXXXX"
        config.consumer_secret     = "XXXXXXX"
        config.access_token        = "XXXXXXX-XXXXX"
        config.access_token_secret = "XXXXXXX"
      end

      client.update(tweet)
    end

在我的config / initializer / devise.rb中,我有以下内容:

# Add Twitter OmniAuth
  require 'omniauth-twitter'
  config.omniauth :twitter, ENV['TWITTER_CONSUMER_KEY'], ENV['TWITTER_CONSUMER_SECRET']
  # Add Facebook OmniAuth
  require 'omniauth-facebook'
  config.omniauth :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET'], :scope => 'basic_info, email, publish_stream'

在我看来,我正在使用表单填写并提交推文。

<p>
  <%= form_for :tweet, url: tweets_path, method: :post do |f| %>
    <%= f.text_field :message %>
    <%= f.submit "Send Tweet" %>
  <% end %>
</p>

1 个答案:

答案 0 :(得分:0)

您应该使用您的应用授权每个Twitter用户(我记得只有消费者密钥和消费者密钥)。

我用简单的方式做到了这一点:

consumer = OAuth::Consumer.new($TWITTER_CONSUMER_KEY, $TWITTER_CONSUMER_SECRET, :site => "https://api.twitter.com")
request_token = consumer.get_request_token(:oauth_callback => "http://localhost/twitter/auth_callback")
return request_token.authorize_url

通过网址我有

access_token = request_token.get_access_token(:oauth_verifier => params[:oauth_verifier] )
token = access_token.token
secret = access_token.secret

现在,如果您将这些toekn和secret设置为REST客户端,则可以从您的用户帐户发布推文。