所以我一直在开发一个相当简单的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