2011-03-02 9 views
7

Estoy usando un dispositivo para administrar la autenticación de usuario en mi aplicación de rieles. Devise es realmente genial para eso.Lista blanca con el dispositivo

Sin embargo, tengo un requisito especial para mi aplicación: un usuario debe ser incluido en una lista blanca antes de poder registrarse como usuario.

Así que hay un administrador que crea una lista de correos electrónicos permitidos. Un usuario se registra con un correo electrónico y si el correo electrónico está en la lista de la lista blanca, se registrará. Sin embargo, si el correo no está en la lista blanca, el registro debe abortarse con un mensaje como "Aún no estás invitado".

¿Tiene alguna idea de cómo podría resolverse con el dispositivo?

Gracias de antemano.

Respuesta

15

Solo usaría la validación del modelo. Estoy asumiendo su clase de usuario tiene el método legado

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

Si desea mostrar el correo electrónico real en el msg de error, ¿cómo alterar este código? – Magne

+0

@Magne 'errors.add: email," no está en nuestra lista de invitaciones: # {email} "' –

2

creé mi propio controlador como se sugiere:

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 

lo coloqué en app/users/registrations_controller.rb. Luego tuve que copiar las vistas de registro del dispositivo en app/views/users/registrations porque no se usaron las vistas predeterminadas.

Se está trabajando ahora, gracias por su ayuda

Cuestiones relacionadas