2016-03-28 13 views
0

Я создаю приложение Rails, которое позволит моему приложению Twitter (из моей учетной записи Twitter) отправить сообщение на временную шкалу пользователя. В настоящее время у меня есть эти настройки приложения в моем веб-приложение:Публикация на чужой счет другого пользователя из моего приложения

consumer_key 
consumer_secret 
access_token 
access_token_secret 

В настоящее время, когда пользователь входит в моем веб-приложение, создает некоторые твиты и отправляет их. сообщения идут на мою учетную запись Twitter. после обратного вызова авторизации мое веб-приложение может установить secret и token возврат из обратного вызова в учетную запись пользователя. какие ключи и токены мне нужно настроить, чтобы сделать мое сообщение для веб-сайта в учетной записи пользователя ANOTHER после авторизации?

Я использую этот драгоценный камень, который возвращает некоторые значения хэша из твиттера: https://github.com/arunagw/omniauth-twitter#authentication-hash.

Мой код выглядит следующим образом: конфига/secrets.yml

development: 
    secret_key_base: 69cc9e7ad45eadafe574hsaf5ba04a21c8bbe9337fb0cb73966bde47a397d72dd0963b29f6218d43c1baeca8bd0a74218e2e552c8d2ab5fdb7fef14 
    twitter_api_key: 2BN4jYtsf453374VM4m7HG 
    twitter_api_secret: LOE545ksfjkae3r8FOzj3NTHXVBfx8njPX0JHMNqCJs3mOnhQleH 

test: 
    secret_key_base: 4c644a9f6d038388ec8ds3060177db7a6c342e4d12083cd36b0b7c3b6609eeb6771681c651c3eee3d740f9003103592sdafdsfaeDFHDGAd6c3e938bf 

# Do not keep production secrets in the repository, 
# instead read values from the environment. 
production: 
    secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 

конфигурация/Инициализаторы/twitter.rb

$twitter = Twitter::REST::Client.new do |config| 
    config.consumer_key = "2BN4jYtsf453374VM4m7HG" 
    config.consumer_secret = "LOE545ksfjkae3r8FOzj3NTHXVBfx8njPX0JHMNqCJs3mOnhQleH" 
    config.access_token = "714265291988058112-EkpjQvSeO6fQBc1ksHahlL8r6QLsYinA" 
    config.access_token_secret = "qFdiOIP6aozmBlPfsUEYvDK884jsfaehwOXqlFSf8J4g8bl0x" 
end 

account.rb

class Account < ActiveRecord::Base 
    before_save :capitalize_name 

    belongs_to :user 
    has_many :posts, dependent: :destroy 

    accepts_nested_attributes_for :posts 

    validates :account_name, :description, presence: :true 

    default_scope { order('created_at DESC') } 

    def self.find_or_create_from_auth_hash(auth_hash) 
     #account = where(provider: auth_hash.provider, uid: auth_hash.uid).first_or_create 
     account = where(id: id_goes_here).first_or_create 
     account.update_attributes!(
      name: auth_hash.info.name, 
      profile_image: auth_hash.info.image, 
      token: auth_hash.credentials.token, 
      secret: auth_hash.credentials.secret, 
      uid: auth_hash.uid 
     ) 
     account 
    end 

    private 
    def capitalize_name 
     self.account_name = self.account_name.split.map { |name| name.capitalize }.join(" ") 
    end 
end 

В настоящее время моих рельсы приложение отправляет на мою учетную запись всегда, даже когда другие пользователи регистрируются, получают авторизацию и имеют токены и секреты, установленные на ИХ учетной записи, из обратного вызова авторизации. Который не то, что я хочу.

PS: Ключи, размещенные здесь, являются поддельными.

ответ

2

Поскольку вы создаете экземпляр Twitter::REST::Client в инициализаторе с использованием фиксированного набора учетных данных, я бы предположил, что клиент всегда использует учетные данные, с которыми он был создан.

Для того, чтобы опубликовать твит от имени Account, вы хотите создать экземпляр клиента, который использует учетные данные, которые вы получаете от разрешения, что-то вроде этого:

class Account < ActiveRecord::Base 
    def twitter_client 
    Twitter::REST::Client.new do |config| 
     config.consumer_key = "2BN4jYtsf453374VM4m7HG" 
     config.consumer_secret = "LOE545ksfjkae3r8FOzj3NTHXVBfx8njPX0JHMNqCJs3mOnhQleH" 
     config.access_token = self.token 
     config.access_token_secret = self.secret 
    end 
    end 
end 

Затем дается счет, вы могли бы разместить так:

account.twitter_client.update("Just setting up my twttr") 
+0

поэтому в данном случае я понимаю 'config.consumer_key' и' config.consumer_secret' всегда фиксируется, и они будут ключ и секрет моего приложение Twitter, что делает твит на от имени пользователя? так что пользовательский ключ и секрет моего приложения Twitter, токен доступа и токен доступа, который пользователь может публиковать от имени пользователя? – Emanuel

+0

да, точно. «access_token» и «access_token_secret» являются специфичными для пользователя – stve