多用户身份验证 Twitter OAuth Gem - Rails
Multi-user Authentication Twitter OAuth Gem - Rails
我的应用程序连接到用户的 Twitter 帐户并从他们的时间轴中提取最新的推文。我使用了 OAuth Twitter strategy and the Twitter GEM by Sferik 的组合。
为了了解该应用程序如何处理多用户身份验证,我创建了两个 Twitter 帐户并尝试在我的应用程序中对每个帐户进行身份验证。
我的问题是两个帐户看到的是同一组推文 (属于帐户 #1)。
这是我的:
OAuth 发起人:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, ENV['TWITTER_API_KEY'], ENV['TWITTER_API_SECRET']
{
:secure_image_url => 'true',
:image_size => 'original',
:authorize_params => {
:force_login => 'true',
}
}
end
用户self.from_omniauth(授权):
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
...
user.save
end
end
调用以从模型中提取推文:
def whatever
..
tweets = $[my_provider_variable].home_timeline
..
end
Twitter API Gem 初始值设定项:
$[my_provider_variable] = Twitter::REST::Client.new do |config|
config.consumer_key = ENV['TWITTER_API_KEY']
config.consumer_secret = ENV['TWITTER_API_SECRET']
config.access_token = ENV['TWITTER_ACCESS_TOKEN']
config.access_token_secret = ENV['TWITTER_ACCESS_SECRET']
end
我会创建一个 belongs_to
您的用户的不同模型,并在用户模型中添加 has_many
。并在该模型中存储 provider 和 uid。然后遍历用户拥有的所有 children 并使用存储在新模型中的信息发送推文请求。这样您就可以添加任意数量的帐户。
在您的代码中,我认为问题出在 first_or_create
。链接新帐户时,它会创建一个新用户,而不是将信息添加到现有用户。
我的应用程序连接到用户的 Twitter 帐户并从他们的时间轴中提取最新的推文。我使用了 OAuth Twitter strategy and the Twitter GEM by Sferik 的组合。
为了了解该应用程序如何处理多用户身份验证,我创建了两个 Twitter 帐户并尝试在我的应用程序中对每个帐户进行身份验证。
我的问题是两个帐户看到的是同一组推文 (属于帐户 #1)。
这是我的:
OAuth 发起人:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, ENV['TWITTER_API_KEY'], ENV['TWITTER_API_SECRET']
{
:secure_image_url => 'true',
:image_size => 'original',
:authorize_params => {
:force_login => 'true',
}
}
end
用户self.from_omniauth(授权):
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
...
user.save
end
end
调用以从模型中提取推文:
def whatever
..
tweets = $[my_provider_variable].home_timeline
..
end
Twitter API Gem 初始值设定项:
$[my_provider_variable] = Twitter::REST::Client.new do |config|
config.consumer_key = ENV['TWITTER_API_KEY']
config.consumer_secret = ENV['TWITTER_API_SECRET']
config.access_token = ENV['TWITTER_ACCESS_TOKEN']
config.access_token_secret = ENV['TWITTER_ACCESS_SECRET']
end
我会创建一个 belongs_to
您的用户的不同模型,并在用户模型中添加 has_many
。并在该模型中存储 provider 和 uid。然后遍历用户拥有的所有 children 并使用存储在新模型中的信息发送推文请求。这样您就可以添加任意数量的帐户。
在您的代码中,我认为问题出在 first_or_create
。链接新帐户时,它会创建一个新用户,而不是将信息添加到现有用户。