2015-04-17 4 views
1

Я использую Twitter API для моего проекта. Когда пользователь входит в систему с использованием Twitter, я настраиваю конфигурацию в соответствии с документацией.Объявление переменной - Twitter API Ruby on Rails

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_action :authenticate_user! 
    before_action :set_twitter_client 

    private 
    def set_twitter_client 
     if user_signed_in? 
     @twitter_client = Twitter::REST::Client.new do |config| 
      config.consumer_key  = "xxx" 
      config.consumer_secret  = "xxx" 
      config.access_token  = current_user.token 
      config.access_token_secret = current_user.token_secret 
     end 
     end 
    end 
end 

Однако каждый пользователь загрузить страницу, эта декларация напомним, и я в конечном итоге с переливом квот, это раздражает. Я попытался объявить эту переменную только один раз и сохранить ее в переменной сеанса, но она не работает.

Так что мой вопрос в том, что является лучшим способом объявить эту конфигурационную переменную? Можно ли объявить его один раз для каждого подключенного пользователя и сохранить его где-нибудь? Или мне нужно напомнить об этом каждый раз, когда пользователь загружает новую страницу?

ответ

0

Я бы рекомендовал использовать инициализатор для вашей конфигурации. Все, что входит в конфигурацию/инициализаторы, запускается один раз, когда рельсы запускаются, и это обеспечивает центральное расположение для настройки/подключения. Например, в конфигурации/инициализаторах/twitter_initializer.rb:

TwitterClient = Twitter::REST::Client.new do |config| 
     config.consumer_key  = ENV["TWITTER_CONSUMER_KEY"] 
     config.consumer_secret  = ENV["TWITTER_CONSUMER_SECRET"] 
     config.access_token  = ENV["TWITTER_ACCESS_TOKEN"] 
     config.access_token_secret = ENV["TWITTER_ACCESS_SECRET"] 
end 

затем в контроллере вы можете использовать TwitterClient везде, чтобы сделать ваш API вызовов.

+0

Но ENV ["TWITTER_ACCESS_TOKEN"] и ENV ["TWITTER_ACCESS_SECRET"] являются разными для каждого пользователя, поэтому я не могу его хранить где-то «глобально», и я могу знать его перед входом в систему?! Вот почему я делаю конфигурацию только тогда, когда они вошли в систему. Может быть, я ошибаюсь?! –

+0

Маркер доступа и секрет доступа различаются для каждого зарегистрированного приложения («пользователь» API Twitter) не для каждого отдельного пользователя. Если вы хотите интегрироваться с OAuth Twitter, чтобы обеспечить «вход в Twitter», я бы посоветовал Oauth для разработчиков Twitter. Если вы хотите настроить автоматизированный клиент для нескольких зарегистрированных приложений в Twitter Rest Client, у вас будет более сложная задача. – Chris

Смежные вопросы