Jnunemaker刚刚更新了他的twitter gem (https://github.com/jnunemaker/twitter),并删除了Twitter::Oauth类。我的代码看起来不太像他的示例,所以我在更新它时遇到了问题。下面是我的代码在twitter 0.9 gem中的样子:
UsersController
def oauth
consumer = Twitter::OAuth.new('mykey','mysecret')
request_token = consumer.request_token
session[:request_token] = request_token.token
session[:request_token_secret] = request_token.secret
redirect_to 'http://api.twitter.com/oauth/authorize?oauth_token='+request_token.token
end
def callback
consumer = Twitter::OAuth.new('mykey','mysecret')
atoken, asecret = oauth.authorize_from_request(session[:request_token], session[:request_token_secret], params[:oauth_verifier])
consumer.authorize_from_access(atoken,asecret)
user = Twitter::Base.new(consumer).verify_credentials
#and then I create a new user in my application, with attributes such as the user's follower count, etc
end
下面是我尝试更改此代码的一个示例:
UsersController
def oauth
consumer = OAuth::Consumer.new("mykey", "mysecret", :site => "siteurl")
request_token = consumer.get_request_token
session[:request_token] = request_token.token
session[:request_token_secret] = request_token.secret
redirect_to 'http://api.twitter.com/oauth/authorize?oauth_token='+request_token.token
end
def callback
consumer = OAuth::Consumer.new("mykey", "mysecret", :site => "siteurl")
request_token = session[:request_token]
atoken = OAuth::RequestToken.new(consumer, request_token.token, request_token.secret).get_access_token(:oauth_verifier => params[:oauth_verifier])
consumer.authorize_from_access(atoken)
user = Twitter::Client.new(consumer).verify_credentials
Gemfile
...
gem 'oauth'
我确信我的回调方法中有很多地方是错误的,但有一件事很奇怪,那就是我的oauth方法在我本地运行时工作得很好,但当我在我的live (部署了heroku)版本中尝试时,却给了我一个'502 Bad Gateway‘错误。
发布于 2010-11-25 00:39:31
如果您不能让它与您现在拥有的东西一起工作,我可以将Omniauth gem与Twitter gem一起使用。Omniauth is very easy to setup.
要使用Twitter gem,只需在Omniauth回调完成后获取访问令牌信息:
token = omniauth['credentials']['token'],
secret = omniauth['credentials']['secret']
然后在使用Twitter gem方法之前设置Twitter gem配置设置。
Twitter.oauth_token = token
Twitter.oauth_token_secret = secret
Twitter.home_timeline.first.text
(如果您还没有在初始化程序文件中设置,则必须配置Twitter gem consumer_key和consumer_key_secret ...)
发布于 2010-11-24 12:09:03
我已经有了好运气
授权逻辑+ Authlogic连接。
我不确定您是否需要手动实现oauth,但gem可能值得一看。
https://github.com/viatropos/authlogic-connect
我发现oauth提供程序的唯一问题是,如果回调url无法识别,他们有时会提供糟糕的错误消息,回调url是在获取api密钥的地方配置的。
-Ken
发布于 2015-01-27 22:13:47
在你的例子中你已经很接近了。您的控制器操作的正确代码如下所示:
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
https://stackoverflow.com/questions/4262222
复制相似问题