2011-08-06 65 views
5

試圖讓用戶登錄/註冊Twitter和Facebook。 Twitter的作品沒有問題,但Facebook的策略不同。無法使用Facebook進行身份驗證:OAuth2的未定義方法「web_server」?

undefined method `web_server' for #<OAuth2::Client:0x00000005211d58> 

跟蹤顯示

oa-oauth (0.0.1) lib/omniauth/strategies/oauth2.rb:18:in `request_phase' 
oa-oauth (0.0.1) lib/omniauth/strategies/facebook.rb:28:in `request_phase' 
oa-core (0.0.5) lib/omniauth/strategy.rb:25:in `call!' 
oa-core (0.0.5) lib/omniauth/strategy.rb:19:in `call' 
oa-core (0.0.5) lib/omniauth/builder.rb:22:in `call' 
warden (1.0.5) lib/warden/manager.rb:35:in `block in call' 
warden (1.0.5) lib/warden/manager.rb:34:in `catch' 
warden (1.0.5) lib/warden/manager.rb:34:in `call' 

別人的經驗?

ps。我使用下面的寶石:

gem 'oa-oauth', :require => 'omniauth/oauth' 
gem 'oauth2' 

我不使用全omniauth寶石作爲其可尋址的依賴與其他寶石衝突。

+0

什麼版本的oauth2您使用的是?據我所知,由於oauth2規格的變化速度很快,所以更新速度非常快。當我使用試圖使用oauth2版本0.5.0 –

+0

的魔法寶石時,我遇到同樣的問題我目前使用Oauth2 0.4.1 – digitalWestie

回答

4

我試圖用facebook_oauth(https://github.com/moomerman/facebook_oauth)在我的Rails應用程序時遇到了同樣的問題。花了一個小時左右的時間試圖改變它的代碼後,我意識到只是直接使用oauth2可能會更容易。我解決了這個問題,現在不需要這個中間庫。具體方法如下:

Gemfile添加

gem 'oauth2' 

然後運行

bundle update

然後,在你login_via_facebook方法,你可以手動構建對話框URI或使用沿着這些線路的OAuth客戶端的東西:

oauth_client = OAuth2::Client.new(APPLICATION_ID, APPLICATION_SECRET, { 
    :authorize_url => 'https://www.facebook.com/dialog/oauth' 
}) 

redirect_to oauth_client.authorize_url({ 
    :client_id => APPLICATION_ID, 
    :redirect_uri => YOUR_REDIRECT_URL 
}) 

如果您需要申請額外的權限,在authorize_url調用指定scope PARAM:

redirect_to oauth_client.authorize_url({ 
    :client_id => APPLICATION_ID, 
    :redirect_uri => YOUR_REDIRECT_URL, 
    :scope => 'offline_access,email' 
}) 

然後,在處理YOUR_REDIRECT_URL方法(我稱之爲我的login_via_facebook_callback),做這樣的事情:

oauth_client = OAuth2::Client.new(APPLICATION_ID, APPLICATION_SECRET, { 
    :site => 'https://graph.facebook.com', 
    :token_url => '/oauth/access_token' 
}) 

begin 

    access_token = oauth_client.get_token({ 
     :client_id => APPLICATION_ID, 
     :client_secret => APPLICATION_SECRET, 
     :redirect_uri => YOUR_REDIRECT_URL, 
     :code => params[:code], 
     :parse => :query 
    }) 

    access_token.options[:mode] = :query 
    access_token.options[:param_name] = :access_token 
    facebook_user_info = access_token.get('/me', {:parse => :json}).parsed 

rescue Error => e 

    # You will need this error during development to make progress :) 
    #logger.error(e) 

end 

現在facebook_user_info有基本的用戶信息!

1

我也有類似的問題,您應該要做兩件事情:

  1. 我也有過沖突的寶石的問題/依賴性問題,在我的Gemfile添加此解決他們:

寶石'omniauth',:GIT中=> 'GIT中://github.com/intridea/omniauth.git'

  1. 嘗試使用其作品非常好了在任何時間開始了Twitter/Facebook應用Rails應用程序模板,在你的終端運行此命令:

軌新APP_NAME -m https://github.com/RailsApps/rails3-application-templates/raw/master/rails3-mongoid-omniauth-template.rb -T

你可以閱讀更多關於它在這裏: https://github.com/RailsApps/rails3-mongoid-omniauth/wiki/Tutorial

相關問題