设计:在失败的用户身份验证时重定向到不同的路径

时间:2018-02-23 12:25:09

标签: ruby-on-rails devise

我很难找到一种方法来自定义authenticate_user!,这样如果用户没有登录,它将重定向到登录页面,而不会重定向到测试注册页面。

有没有办法可以通过向authenticate_user!方法添加类似下面的内容来有条件地将重定向路径更改为测试注册页?

ENV['BETA_MODE'] ? redirect_to beta_signup_path : redirect_to login_path

2 个答案:

答案 0 :(得分:1)

您需要为自己的应用添加自定义设计控制器。你可以这样做;

config/routes.rb档案中;

devise_for :users, controllers: { registrations: "registrations" }

将以下控制器内容添加到app/controllers/registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController
  protected

  def after_sign_up_path_for(resource)
    ENV['BETA_MODE'] ? beta_signup_path : login_path
  end
end

更多:https://github.com/plataformatec/devise/wiki/how-to:-redirect-to-a-specific-page-on-successful-sign-up-(registration)

答案 1 :(得分:0)

我找到了一个针对此处首次提到的问题https://groups.google.com/forum/#!topic/plataformatec-devise/qymDM9u9n6Y

我在config/initializers/devise.rb中定义了一个自定义身份验证失败类,如下所示:

config.warden do |manager|
  manager.failure_app = CustomAuthenticationFailure
end

在此之后,我在custom_authentication_failure.rb中创建了一个名为/vendor的文件。该文件的内容如下所示:

class CustomAuthenticationFailure < Devise::FailureApp
  protected

  def redirect_url
    ENV['BETA_MODE'] ? beta_signup_path : new_user_session_path
  end
end

我还需要在config/application.rb中添加它,因为它还没有出现:

config.autoload_paths += %W(#{config.root}/vendor)