我正在使用sferik的Twitter Gem和plataformatec的Devise Gem。
如果我很了解这个过程,下面是我的操作方法:当用户使用他的Twitter帐户登录时,我将他的代币和token_secret存储在数据库中,这样我就可以执行:
@client = Twitter::REST::Client.new do |config|
config.consumer_key = "MY_KEY"
config.consumer_secret = "MY_SECRET"
config.access_token = current_user.token
config.access_token_secret = current_user.token_secret
end
因此,对于@client
,每个用户都有不同的config.access_token(_secret)
。
我的问题是,让Twitter客户端在每个控制器中全局可用的最佳方法是什么,但仅当用户登录时可用?
我无法将其放在config/initializers
中,因为config.access_token(_secret)
尚未设置。。。
谢谢你的澄清。
解决方案其实很简单。。。
刚刚在我的ApplicationController中添加了一个before_action,并检查用户是否登录。
class ApplicationController < ActionController::Base
before_action :set_twitter_client
private
def set_twitter_client
if user_signed_in?
@client = Twitter::REST::Client.new do |config|
config.consumer_key = "MY_KEY"
config.consumer_secret = "MY_SECRET"
config.access_token = current_user.token
config.access_token_secret = current_user.token_secret
end
end
end
end