disabling Devise registration for production environment only

前端 未结 4 452
南旧
南旧 2020-12-22 16:16

I am launching a beta site with a select group of users. I want to disable registration in the production environment only, and only for a short period of time (i.e. I don\'

相关标签:
4条回答
  • 2020-12-22 16:48

    Since others are having the problem I'm having (see my comments). Here is exactly how I fixed it. I used murphyslaw's idea. But you also need to make sure devise uses your new controller for the registration routing, or it won't do much for you.

    Here is my controller override:

    class RegistrationsController < Devise::RegistrationsController
      def new
        flash[:info] = 'Registrations are not open yet, but please check back soon'
        redirect_to root_path
      end
    
      def create
        flash[:info] = 'Registrations are not open yet, but please check back soon'
        redirect_to root_path
      end
    end
    

    I've added flash messages to inform anyone who somehow stumbles upon the registration page why it isn't working.

    Here is what is in my routes.rb

      if Rails.env.production?
        devise_for :users, :controllers => { :registrations => "registrations" } 
      else
        devise_for :users
      end
    

    The controllers hash specifies that I want it to use my overridden registrations controller.

    Anyways, I hope that saves someone some time.

    0 讨论(0)
  • 2020-12-22 16:56

    you could override the Devise::RegistrationsController and the create action to redirect to the page you want. The Controller should probably look something like this:

    class User::RegistrationsController < Devise::RegistrationsController
    
      def create
        redirect_to your_page_path if Rails.env.production?
      end
    
    end
    
    0 讨论(0)
  • 2020-12-22 16:58

    Only remove :registerable will not solve the problem. If you have some routes in your view you will get an error:

    undefined local variable or method 'edit_user_registration_path'

    Take care of this.

    0 讨论(0)
  • 2020-12-22 17:05

    Edit the user model and remove :registerable, I think that should give you what you want.

    Edit:

    I think this would work:

    if Rails.env.production?
      devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable
    else
      devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable, :registerable 
    end
    
    0 讨论(0)
提交回复
热议问题