Ruby on rails 如何使用oauth gem和twitter 1.0.0 gem对Rails应用程序中的用户进行身份验证?
JnueMaker刚刚更新了他的twitter gem(https://github.com/jnunemaker/twitter)并删除了Twitter::Oauth类。我的代码看起来不像他的示例,所以我在更新它时遇到了问题。以下是我的代码在使用twitter 0.9 gem时的外观: 用户控制器 下面是我尝试更改此代码的示例: 用户控制器 GemfileRuby on rails 如何使用oauth gem和twitter 1.0.0 gem对Rails应用程序中的用户进行身份验证?,ruby-on-rails,twitter,oauth,twitter-gem,Ruby On Rails,Twitter,Oauth,Twitter Gem,JnueMaker刚刚更新了他的twitter gem(https://github.com/jnunemaker/twitter)并删除了Twitter::Oauth类。我的代码看起来不像他的示例,所以我在更新它时遇到了问题。以下是我的代码在使用twitter 0.9 gem时的外观: 用户控制器 下面是我尝试更改此代码的示例: 用户控制器 Gemfile 我确信我的回调方法中有很多错误,但有一件奇怪的事情是,当我在本地运行时,我的oauth方法工作正常,但当我从live(与heroku一起部
我确信我的回调方法中有很多错误,但有一件奇怪的事情是,当我在本地运行时,我的oauth方法工作正常,但当我从live(与heroku一起部署)版本尝试时,会出现“502坏网关”错误。我在这方面运气不错 Authlogic+Authlogic连接 我不确定您是否需要手动实现oauth,但是gem可能值得研究 我在oauth提供程序中发现的唯一问题是,如果无法识别回调url,它们有时会提供错误消息,而回调url是在获取api密钥的位置配置的
-肯如果你不能让它与你现在拥有的一起工作,我已经能够将Omniauth gem与Twitter gem一起使用 要使用Twitter gem,只需在Omniauth回调完成后获取访问令牌信息:
token = omniauth['credentials']['token'],
secret = omniauth['credentials']['secret']
然后,在使用twittergem方法之前,只需设置twittergem配置设置
Twitter.oauth_token = token
Twitter.oauth_token_secret = secret
Twitter.home_timeline.first.text
(如果尚未在初始值设定项文件中设置,则必须配置Twitter gem consumer_key和consumer_key_secret…)您在示例中已经接近成功。控制器操作的正确代码如下所示:
def new
consumer = OAuth::Consumer.new(YOUR_CONSUMER_TOKEN, YOUR_CONSUMER_SECRET, site: 'https://api.twitter.com', request_endpoint: 'https://api.twitter.com', authorize_path: '/oauth/authenticate')
unless params[:oauth_token]
request_token = consumer.get_request_token({ oauth_callback: request.original_url })
session[:request_token] = { token: request_token.token, secret: request_token.secret}
redirect_to request_token.authorize_url(force_login: 'true')
else
request_token = OAuth::RequestToken.from_hash(consumer, oauth_token: session[:request_token]["token"], oauth_token_secret: session[:request_token]["secret"])
access_token = request_token.get_access_token(oauth_verifier: params[:oauth_verifier])
session[:request_token] = nil
@client = Twitter::REST::Client.new do |config|
config.consumer_key = YOUR_CONSUMER_TOKEN
config.consumer_secret = YOUR_CONSUMER_SECRET
config.access_token = access_token.token
config.access_token_secret = access_token.secret
end
end
end
您是否使用代理(即Heroku的Apigee附加组件)?否。我使用heroku gem你能直接使用access_令牌发出请求吗?i、 e.访问令牌请求(:get“”)您是否在routes.rb中定义了“/auth/:provider/callback”路由?听起来您得到了正确的重定向。注销您的Twitter帐户,然后尝试登录/auth/Twitter。然后它会将您发送到Twitter。下面是另一个设置OmniAuth的示例,我正在尝试,但由于某种原因,它仍然不起作用-在我转到myapp/auth/twitter它重定向到myapp/auth/twitter/callback?oauth_token=xxxx&oauth_verifier=xxxx。我认为这应该发生在twitter api网站上。知道为什么会发生这种情况吗?在我的twitter应用程序的设置页面上,在oauth 1.0a设置下,它说:oauth 1.0a集成需要更多的工作。这可能有什么问题吗g怎么办?
token = omniauth['credentials']['token'],
secret = omniauth['credentials']['secret']
Twitter.oauth_token = token
Twitter.oauth_token_secret = secret
Twitter.home_timeline.first.text
def new
consumer = OAuth::Consumer.new(YOUR_CONSUMER_TOKEN, YOUR_CONSUMER_SECRET, site: 'https://api.twitter.com', request_endpoint: 'https://api.twitter.com', authorize_path: '/oauth/authenticate')
unless params[:oauth_token]
request_token = consumer.get_request_token({ oauth_callback: request.original_url })
session[:request_token] = { token: request_token.token, secret: request_token.secret}
redirect_to request_token.authorize_url(force_login: 'true')
else
request_token = OAuth::RequestToken.from_hash(consumer, oauth_token: session[:request_token]["token"], oauth_token_secret: session[:request_token]["secret"])
access_token = request_token.get_access_token(oauth_verifier: params[:oauth_verifier])
session[:request_token] = nil
@client = Twitter::REST::Client.new do |config|
config.consumer_key = YOUR_CONSUMER_TOKEN
config.consumer_secret = YOUR_CONSUMER_SECRET
config.access_token = access_token.token
config.access_token_secret = access_token.secret
end
end
end