我在考拉的github上发布了同样的内容,但没有人回答我所以我放在这里。
所以当我尝试使用Omniauth使用Twitter登录时:
I, [2013-11-15T18:57:12.371006 #28412] INFO -- omniauth: (twitter) Request phase initiated.
127.0.0.1 - - [15/Nov/2013 18:57:13] "GET /auth/twitter HTTP/1.1" 500 144366 0.9355
我还有一个考拉登录到facebook我没有使用Omniauth用于Facebook我只是使用Omniauth用于推特,如果我不要求考拉是好的,但如果我同时生成它:
undefined method `[]=' for #<Koala::Facebook::OAuth:0x00000001b03348>
~>In oauth.rb line 31
我正在使用1.6版本的Koala和Sinatra。
我的代码是:
#Facebook
get '/loginfb' do
session['oauth'] = Koala::Facebook::OAuth.new($APP_ID, $APP_SECRET, "#{request.base_url}/callbackfb")
redirect session['oauth'].url_for_oauth_code(:permissions => ["publish_stream"])
end
get '/callbackfb' do
session['access_token'] = session['oauth'].get_access_token(params[:code])
registerUserFB() #Just register the user function
redirect '/accounts'
end
#Twitter
#By defualt logs in with /auth/twitter
get '/auth/twitter/callback' do
erb "<h1>#{params[:provider]}</h1><pre>#{JSON.pretty_generate(request.env['omniauth.auth'])}</pre>"
p auth['credentials']['token']
end
get '/auth/failure' do
erb "<h1>Authentication Failed:</h1><h3>message:<h3> <pre>#{params}</pre>"
end
提前谢谢你们。
答案 0 :(得分:0)
我使用另一个宝石来记录twitter,名为twitter_oauth,你可以找到here
与sinatra一起使用非常简单:
#Sinatra stuff
require 'twitter_oauth'
#more sinatra stuff
$CONSUMER_KEY = '32423...'
$CONSUMER_SECRET = '...adads...'
$CALLBACK_URL = 'http://....'
tw_client = TwitterOAuth::Client.new(
:consumer_key => $CONSUMER_KEY,
:consumer_secret => $CONSUMER_SECRET
)
$request_token = tw_client.request_token(:oauth_callback => $CALLBACK_URL)
#sinatra routes
get '/logintw' do
redirect $request_token.authorize_url
end
get '/callbacktw' do
@access_token = $request_token.get_access_token :oauth_verifier => params[:oauth_verifier]
p @access_token.params[:oauth_token]
p @access_token.params[:oauth_token_secret]
p @access_token.params[:screen_name]
p @access_token.params[:user_id]
redirect '/accounts'
end
#more sinatra routes
不是最好的解决方案,但对我而言是有效的!
非常感谢。