ruby-on-rails - sistemas - sistema de recomendacion tesis
Lista blanca con un dispositivo (3)
Estoy usando un dispositivo para administrar la autenticación de usuario en mi aplicación de rieles. Devise es realmente genial para eso.
Sin embargo, tengo un requisito especial para mi solicitud: un usuario debe ser incluido en una lista blanca antes de poder registrarse como usuario.
Entonces, 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".
¿Tienes una idea de cómo podría resolverse con el dispositivo?
Gracias por adelantado.
Lo que puede hacer es crear su propio controlador de registros y extender el dispositivo uno como:
class MyRegistrationController < Devise::RegistrationsController
def create
# do your checks
super
end
end
ver: https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb Y: https://github.com/plataformatec/devise/wiki/How-to:-Customize- rutas-a-usuario-registro-páginas
¡Buena suerte!
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 puse en la app/users/registrations_controller.rb
. Luego tuve que copiar las vistas de registro del app/views/users/registrations
en la app/views/users/registrations
porque no se usaron las vistas predeterminadas.
Está funcionando ahora, gracias por tu ayuda
Solo usaría la validación del modelo. Supongo que tu clase de usuario tiene el método de diseño
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