Whitelisting with devise

后端 未结 3 1650
栀梦
栀梦 2020-12-09 06:15

I am using devise to manage user authentication in my rails app. Devise is really great for that.

However I have a special requirement for my application: A user mus

相关标签:
3条回答
  • 2020-12-09 07:01

    I would just use model validation. I'm assuming your User class has the devise method

    class User < ActiveRecord::Base
      devise :database_authenticatable, :registerable #etc
    
      before_validation :whitelisted
    
      def whitelisted
        unless celebrityemail.include? email
          errors.add :email, "#{email} is not on our invitation list"  
        end
      end 
    
    end
    
    0 讨论(0)
  • 2020-12-09 07:07

    What you can do is create your own registrations controller and extend the device one like:

    class MyRegistrationController < Devise::RegistrationsController
      def create
        # do your checks
        super
      end
    end
    

    see: https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb And: https://github.com/plataformatec/devise/wiki/How-to:-Customize-routes-to-user-registration-pages

    Good luck!

    0 讨论(0)
  • 2020-12-09 07:07

    I did create my own controller as suggested:

    class Users::RegistrationsController < Devise::RegistrationsController
        def create
            email = params[:user][:email]
            if Admin::Whitelist.find_by_email(email) != nil
                super
            else
                build_resource
    
                set_flash_message :error, "You are not permitted to sign up yet. If you have already payed your registration fee, try again later."
                render_with_scope :new
            end
        end
    end
    

    I placed it in app/users/registrations_controller.rb. Then I had to copy the devise registration views into app/views/users/registrations because the default views were not used.

    It is working now, thanks for your help

    0 讨论(0)
提交回复
热议问题