Ruby on rails 建立design+;omniauth在rails中,在';登录';

Ruby on rails 建立design+;omniauth在rails中,在';登录';,ruby-on-rails,devise,omniauth,ruby-on-rails-4,Ruby On Rails,Devise,Omniauth,Ruby On Rails 4,因此,我一直在开发一个相当简单的rails 4应用程序,现在我需要添加用户身份验证。特别是,我希望通过Desive和omniauth的组合使用Google应用程序(并且只有Google应用程序)身份验证。现在,Desive有一个可能会告诉你如何设置这样的东西。在安装Desive并在教程中进行建议的更改后,一切看起来都很棒。我点击了我的登录链接,并被正确地发送到谷歌进行身份验证。但是,在提供凭据后,我立即遇到路由错误: 未初始化的常量用户 这令人困惑。据我所知,这意味着控制器不见了。。。但我肯定有

因此,我一直在开发一个相当简单的rails 4应用程序,现在我需要添加用户身份验证。特别是,我希望通过Desive和omniauth的组合使用Google应用程序(并且只有Google应用程序)身份验证。现在,Desive有一个可能会告诉你如何设置这样的东西。在安装Desive并在教程中进行建议的更改后,一切看起来都很棒。我点击了我的登录链接,并被正确地发送到谷歌进行身份验证。但是,在提供凭据后,我立即遇到路由错误:

未初始化的常量用户

这令人困惑。据我所知,这意味着控制器不见了。。。但我肯定有
users\u 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路由的结果:

                 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\u回调=>“users/omniauth\u回调”

'users/omniauth\u callbacks'
转换为
users::omniauth callbackcontroller
。虽然您的应用程序确实有一个
用户
模型和一个
用户控制器
,但您没有声明一个定义
用户
命名空间的常量

您需要在该命名空间中添加一个控制器来处理回调:

# 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
#app/controllers/users/omniauth_callbacks_controller.rb
类用户::OmniAuthCallbackController<设计::OmniAuthCallbackController
#操作名称应与提供程序的名称匹配
def-facebook;结束
def推特;结束
def github;结束
...
结束

我有那个文件,但好像放错地方了。也就是说,我把它放在
/app/controllers/
而不是
/app/controllers/users/
中。我仍然有一个错误,但这是一个不同的错误,这才是最重要的。(无效的真实性令牌)Rails自动加载需要在
Namespace.rb
Namespace/other_Namespace.rb
中定义另一个命名空间。只要明确需要,您就可以将文件放在任何位置。