2013-08-01 62 views
4

我在SO上發現了類似的線程,但沒有人幫我解決了這個問題。 我的路線是這樣的:Devise + Facebook omniauth:無法找到Devise :: OmniauthCallbacksController的動作'facebook'

devise_for :users do 
    post '/users' => 'registrations#create', :as => 'user_registration' 
end 
devise_for :users, :controllers => {:omniauth_callbacks => "users/omniauth_callbacks"} 

我也試過:

devise_for :users, :controllers => {:omniauth_callbacks => "omniauth_callbacks"} 

但我仍然得到

The action 'facebook' could not be found for Devise::OmniauthCallbacksController 

我甚至嘗試重新啓動服務器,但它沒幫不了我。我正在關注this tutorial

omniauth_callbacks_controller.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def facebook 
     @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user) 

     if @user.persisted? 
      puts @user.inspect 
      flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook" 
      sign_in_and_redirect @user, :event => :authentication 
     else 
      session["devise.facebook_data"] = request.env["omniauth.auth"] 
      redirect_to new_user_registration_url 
     end 
    end 
end 
+1

你有沒有創建應用程序/控制器/用戶/ omniauth_callbacks_controller.rb文件也Facebook的方法嗎? – Debadatt

+0

是的,我將它添加到OP中。 – user984621

+0

最後如何解決,我認爲我有同樣的問題 –

回答

0

更改您的色器件路線

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } 

以確保你的控制器定義相匹配。

0

檢查您的路線。也許他們會產生兩次。嘗試:

devise_for :users, :controllers => {:omniauth_callbacks => "users/omniauth_callbacks"} 
devise_scope :users do 
    post '/users' => 'registrations#create', :as => 'user_registration' 
end 
相關問題