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