【发布时间】:2011-06-16 09:42:23
【问题描述】:
我有一个使用https://github.com/intridea/oauth2 的rails 项目。在我的 Rails 应用程序中,我有以下代码:
ApplicationController.rb
def facebook_client
OAuth2::Client.new(FacebookOauthCredentials::APP_ID, FacebookOauthCredentials::APP_SECRET, :site => 'https://graph.facebook.com')
end
FacebookController.rb
def facebook_session_create(poster, featured_item)
redirect_to facebook_client.web_server.authorize_url(:scope => 'publish_stream', :redirect_uri => "http://localhost:3000/facebook/facebook_callback")
end
def facebook_callback
if(params[:code])
begin
access_token = facebook_client.web_server.get_access_token(params[:code], :redirect_uri => "http://localhost:3000/facebook/facebook_callback")
access_token.post('/me/feed', "testing #{rand(1000)}")
rescue OAuth2::HTTPError => e
render :text => e.response.body
end
end
end
每次我运行这段代码时都会得到这个响应:
{"error":{"type":"OAuthException","message":"Error validating verification code."}}
但是,我使用 OAuth2 gem 的自述文件中提供的 sinatra 应用程序,它工作正常。
def client
OAuth2::Client.new(FacebookOauthCredentials::APP_ID, FacebookOauthCredentials::APP_SECRET, :site => 'https://graph.facebook.com')
end
get '/auth/facebook' do
redirect client.web_server.authorize_url(
:redirect_uri => redirect_uri,
:scope => 'publish_stream'
)
end
get '/auth/facebook/callback' do
access_token = client.web_server.get_access_token(params[:code], :redirect_uri => redirect_uri)
begin
user = JSON.parse(access_token.post('/me/feed', :message => "testing # {rand(10000)}"))
rescue Exception => e
return e.response.body
end
user.inspect
end
def redirect_uri
uri = URI.parse(request.url)
uri.path = '/auth/facebook/callback'
uri.query = nil
uri.to_s
end
我尝试使用 irb 重现这些步骤,但出现 http 400 错误。我不确定这是否与 rails 应用程序的原因相同,或者是因为我正在混合控制台和 Web 浏览器操作。任何建议将不胜感激。
【问题讨论】:
-
您是否使用有效的回调 url 配置您的 facebook 应用程序并使用此回调 url?
-
facebook中配置的回调url为localhost,回调域配置为localhost。
标签: ruby-on-rails ruby facebook oauth