2013-06-28 43 views
0

所以我一直在研究一個相當簡單的rails 4應用程序,並且我已經達到了需要添加用戶身份驗證的程度。特別是,我想通過devise和omniauth的組合來使用Google Apps(以及僅Google應用程序)身份驗證。現在,devise有一個tutorial,據說可以告訴你如何設置類似的東西。在教程中安裝設計並進行建議修改之後,一切似乎都很棒。我點擊了我的登錄鏈接,並已正確發送給谷歌進行身份驗證。不過,我提供我的憑據後,我立即獲贈路由錯誤:在rails中設置devise + omniauth,在登錄後不斷收到路由錯誤

uninitialized constant Users

這是令人困惑的。據我所知,這意味着控制器丟失了......但我肯定有users_controller.rb,它應該是。除此之外,我不知道。

這裏是我的route.rb以供參考:

resources :instances, :users 

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

    # authentication routes 
    devise_scope :user do 
    get 'sign_in', :to => 'devise/sessions#new', :as => :new_user_session 
    get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session 
    end 

    root to: 'instances#index' 

而這裏的rake routes結果:

    Prefix Verb  URI Pattern       Controller#Action 
       instances GET  /instances(.:format)     instances#index 
         POST  /instances(.:format)     instances#create 
      new_instance GET  /instances/new(.:format)    instances#new 
      edit_instance GET  /instances/:id/edit(.:format)   instances#edit 
       instance GET  /instances/:id(.:format)    instances#show 
         PATCH /instances/:id(.:format)    instances#update 
         PUT  /instances/:id(.:format)    instances#update 
         DELETE /instances/:id(.:format)    instances#destroy 
        users GET  /users(.:format)      users#index 
         POST  /users(.:format)      users#create 
       new_user GET  /users/new(.:format)     users#new 
       edit_user GET  /users/:id/edit(.:format)    users#edit 
        user GET  /users/:id(.:format)     users#show 
         PATCH /users/:id(.:format)     users#update 
         PUT  /users/:id(.:format)     users#update 
         DELETE /users/:id(.:format)     users#destroy 
user_omniauth_authorize GET|POST /users/auth/:provider(.:format)  users/omniauth_callbacks#passthru {:provider=>/google_apps/} 
user_omniauth_callback GET|POST /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:google_apps) 
     new_user_session GET  /sign_in(.:format)      devise/sessions#new 
    destroy_user_session GET  /sign_out(.:format)     devise/sessions#destroy 
        root GET /         instances#index 

音符也就是我的運轉軌道4,並制定3.0.0.rc(因爲它的軌道4兼容)

讓我知道是否有其他任何你需要的,幾乎其他一切相關的是在本教程的事情雖然。

回答

2

你問題就在這裏::omniauth_callbacks => 'users/omniauth_callbacks'

'users/omniauth_callbacks'轉化爲Users::OmniauthCallbacksController。雖然您的應用程序確實有User型號和UserController,但您尚未聲明定義Users名稱空間的常量。

你需要該命名空間添加一個控制器來處理回調:

# app/controllers/users/omniauth_callbacks_controller.rb 

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    # action names should match the names of the providers 
    def facebook; end 
    def twitter; end 
    def github; end 
    ... 
end 
+0

我有這樣的文件,但似乎我把它放錯了地方。即我把它放在'/ app/controllers /'而不是'/ app/controllers/users /'中。我仍然收到一個錯誤,但這是一個_different_錯誤,這一切都很重要。 (無效的真實性令牌) –

+0

Rails自動加載需要在Namespace.rb或namespace/another_namespace.rb中定義'Namespace :: AnotherNamespace'。只要您明確要求,您可以將文件放在任何地方。 – fny

相關問題