2016-03-28 2 views
0

Je crée une application Rails qui permettra à mon application Twitter (à partir de mon compte Twitter) de publier sur le calendrier de l'utilisateur. actuellement j'ai ces application de configuration dans mon application web:Publier sur le compte Twitter d'un autre utilisateur à partir de mon application

consumer_key 
consumer_secret 
access_token 
access_token_secret 

actuellement, lorsqu'un utilisateur se connecte à mon application web, crée des tweets et les messages. les messages vont sur mon compte Twitter. après le rappel d'autorisation, mon application Web est en mesure de définir le retour secret et token à partir du rappel au compte d'utilisateurs. Quelles clés et quels jetons dois-je définir pour que mon application Web soit postée sur le compte d'un autre utilisateur après autorisation?

J'utilise cette gemme qui renvoie des valeurs de hachage de twitter: https://github.com/arunagw/omniauth-twitter#authentication-hash.

Mon code ressemble à ceci: config/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"] %> 

config/initializers/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 

Actuellement mes rails L'application est en train de poster sur mon compte, même lorsque les autres utilisateurs se connectent, obtiennent une autorisation et possèdent des jetons et les secrets placés sur leur compte à partir du rappel d'autorisation. Ce qui n'est pas ce que je veux. PS: Les clés affichées ici sont fausses.

Répondre

2

Étant donné que vous instanciez le Twitter::REST::Client dans un initialiseur en utilisant un ensemble d'informations d'identification fixe, je suppose que le client utilise toujours les informations d'identification avec lesquelles il a été instancié.

Pour poster un tweet au nom d'un Account, vous aurez envie de instancier un client qui utilise les informations d'identification que vous recevez de l'autorisation, quelque chose comme ceci:

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 

ensuite donné un compte, vous pouvez publier comme ceci:

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

dans ce cas je comprends la '' config.consumer_key' et config.consumer_secret' sont toujours fixes et ceux-ci seront la clé secrète et à mon Twitter application qui rend le tweet au nom de l'utilisateur, n'est-ce pas? donc la clé du consommateur et le secret de mon application twitter, jeton d'accès et secret d'accès jeton de l'utilisateur à afficher au nom de l'utilisateur? – Emanuel

+0

oui, exactement. le 'access_token' et' access_token_secret' sont spécifiques à l'utilisateur – stve