【问题标题】:Variable declaration - Twitter API Ruby on Rails变量声明 - Twitter API Ruby on Rails
【发布时间】:2015-06-24 19:14:09
【问题描述】:

我在我的项目中使用Twitter API。当用户使用 Twitter 登录时,我按照文档所述设置配置。

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

但是,每次用户加载页面时,此声明都会被召回,最终导致配额溢出,这很烦人。我试图只声明这个变量一次并将其存储在会话变量中,但它不起作用。

所以我的问题是,声明此配置变量的最佳方式是什么?是否可以为每个连接的用户声明一次并将其存储在某个地方?还是每次用户加载新页面时我都需要调用它?

【问题讨论】:

    标签: ruby-on-rails ruby twitter oauth


    【解决方案1】:

    我建议为您的配置使用初始化程序。 config/initializers 中的任何内容都会在 rails 启动时运行一次,这为配置/连接事物提供了一个中心位置。例如在 config/initializers/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 调用。

    【讨论】:

    • 但是 ENV["TWITTER_ACCESS_TOKEN"] 和 ENV["TWITTER_ACCESS_SECRET"] 对于每个用户来说都是不同的,所以我不能将它存储在“全局”的某个地方,我可以在登录之前知道它?!这就是为什么我只在他们登录时才进行配置。也许我错了?!
    • 每个注册应用程序(Twitter API 的“用户”)的访问令牌和访问密钥都不同,而不是每个用户本身。如果您希望与 Twitter 的 OAuth 集成以提供“使用 twitter 登录”,那么我会咨询 Oauth for Twitter Developers。如果您希望在 Twitter Rest Client 上为多个已注册的应用程序配置自动化客户端,那么您手头的任务会更复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2012-12-28
    相关资源
    最近更新 更多