在轨道中设置 devise+omniauth,'login'后不断收到路由错误



所以我一直在开发一个相当简单的rails 4应用程序,我已经到了需要添加用户身份验证的地步。特别是,我想通过结合使用design和omniauth来使用谷歌应用程序(并且只有谷歌应用程序)身份验证。现在,design有一个教程,据说它告诉你如何设置这样的东西。在安装了design并在教程中进行了建议的更改后,一切似乎都很好。我点击了我的登录链接,然后被正确地发送到谷歌进行身份验证。然而,在我提供凭据后,我立即收到一个路由错误:

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

另外值得注意的是,我正在运行rails 4并设计3.0.0.rc(因为它与rails 4兼容)

如果你还需要什么,请告诉我,但几乎所有其他相关的内容都在教程中。

您的问题在于::omniauth_callbacks => 'users/omniauth_callbacks'

CCD_ 6翻译成CCD_。虽然您的应用程序确实有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

最新更新