【问题标题】:Rails: How do I override Devise controller and Devise routes at the same time?Rails:如何同时覆盖 Devise 控制器和 Devise 路由?
【发布时间】:2014-03-30 13:24:00
【问题描述】:

我正在使用 Rails 4.0.2 和 Devise 3.2.2 来处理用户注册/身份验证。

我已经用谷歌搜索并在 stackoverflow 上搜索了答案,但实际上找不到可以回答我问题的东西。

以下代码是我的 routes.rb,我跳过了所有会话路由和注册路由,但由于某种原因,Devise 没有使用我的自定义 registrations_controller.rb,因为如果是,它应该重定向到 /pages/success(请参阅下面我的 registrations_controller.rb )

routes.rb

App::Application.routes.draw do

  resources :posts
  resources :questions
  get "users/:id", to: "users#show" 

  devise_for :users, :controllers => {:registrations => "registrations"}, :skip =>     [:sessions, :registrations]


  as :user do
    get 'login' => 'devise/sessions#new', :as => :new_user_session
    post 'login' => 'devise/sessions#create', :as => :user_session
    delete 'signout' => 'devise/sessions#destroy', :as => :destroy_user_session
  end


  as :user do
    get '/' => 'devise/registrations#new', :as => :new_user_registration
    post 'register' => 'devise/registrations#create', :as => :user_registration
  end

  get "registrations/update"
  get "pages/home"
  get "pages/privacy"
  get "pages/terms"
  get "pages/success"

end 

registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController

protected

  def after_inactive_sign_up_path_for(resource)
    '/pages/success'
  end

end

【问题讨论】:

  • 你怎么知道它没有使用它,在你执行非活动注册后你的日志说它在做什么?
  • 如果我排除 :skip 和所有自定义路由,它将重定向到 '/pages/success'

标签: ruby-on-rails ruby-on-rails-4 devise


【解决方案1】:

您可能有几个潜在的问题:


跳过

如果您跳过注册功能,我想它会阻止 Devise 调用您的 RegistrationsController

我会亲自这样做(更正您的路线):

#config/routes.rb
root to: "users#index" (where ever your "logged-in" page is)

devise_for :users, path: "", controllers: { sessions: "sessions", registrations: "registrations" }, path_names: { sign_in: 'login', password: 'forgot', confirmation: 'confirm', unlock: 'unblock', sign_up: 'register', sign_out: 'signout'}

这将为您提供所需的路由,并将路由到您应用中的“已验证”索引页面,从而显示 Devise 的登录或注册页面


定义

您可能遇到的另一个问题是您的设计注册控制器的定义不正确。我们在最近的开发应用程序中使用此代码:

#app/controllers/registrations_controller.rb
class RegistrationsController < ::Devise::RegistrationsController
end

也许您可以尝试在您的Devise::RegistrationsController 之前使用:: 来查看它是否调用?

【讨论】:

  • 哦,是的!这条线devise_for :users, path: "", controllers: { sessions: "sessions", registrations: "registrations" }, path_names: { sign_in: 'login', password: 'forgot', confirmation: 'confirm', unlock: 'unblock', sign_up: 'register', sign_out: 'signout'} 解决了问题,顺便说一句,在我的Devise::RegistrationsController 没有调用之前添加::。干杯!
  • 对不起,我不能因为我没有足够的声望点,我需要 15。你介意投票给我的问题吗?哈哈谢谢
  • 好了,伙计,希望对您有所帮助!
  • 干杯,一旦我得到 15 分,我会回来投票给你的答案。谢谢
  • 感谢您接受我的回答 :) 希望一切顺利!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多