Белый список с устройством - PullRequest
7 голосов
/ 02 марта 2011

Я использую devise для управления аутентификацией пользователей в моем приложении rails. Devise действительно отлично подходит для этого.

Однако у меня есть специальное требование для моего приложения: пользователь должен быть в белом списке, прежде чем он сможет зарегистрироваться в качестве пользователя.

Итак, есть администратор, который создает список разрешенных писем. Пользователь регистрируется по электронной почте, и, если он находится в таблице белого списка, он будет зарегистрирован. Однако, если письмо не находится в белом списке, регистрация должна быть прервана с сообщением типа «Вы еще не приглашены».

У вас есть идея, как это можно решить с помощью устройства?

Заранее спасибо.

Ответы [ 3 ]

16 голосов
/ 02 марта 2011

Я бы просто использовал проверку модели. Я предполагаю, что ваш класс User имеет метод devise

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
6 голосов
/ 02 марта 2011

Что вы можете сделать, это создать свой собственный контроллер регистрации и расширить устройство, например:

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

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

Удачи!

2 голосов
/ 06 марта 2011

Я создал свой собственный контроллер, как предложено:

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

Я поместил его в app/users/registrations_controller.rb. Затем мне пришлось скопировать представления регистрации устройства в app/views/users/registrations, потому что представления по умолчанию не использовались.

Сейчас работает, спасибо за помощь

...