【问题标题】:Tweeting from Rails Application来自 Rails 应用程序的推文
【发布时间】:2014-04-30 15:55:22
【问题描述】:

我为用户设置了 Devise 和 Omniauth,以便通过电子邮件、Twitter 和 Facebook 登录。我不想让用户从应用程序内部发布消息。

我目前正在使用以下代码,但它仅从我的 Twitter 帐户发布。我假设这与未正确设置 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>

【问题讨论】:

    标签: ruby-on-rails twitter devise omniauth


    【解决方案1】:

    您应该使用您的应用授权每个 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 客户端,您就可以从您的用户帐户发布推文。

    【讨论】:

      猜你喜欢
      • 2012-03-05
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 2012-04-27
      • 1970-01-01
      相关资源
      最近更新 更多