ruby on rails - tokens - Cómo agregar usuarios con correo electrónico solo en Devise
rails authentication (2)
Me gustaría que mis usuarios puedan ''suscribirse'' al solo proporcionar una dirección de correo electrónico sin obligarlos a registrarse con una contraseña a menos que lo deseen.
Puedo agregar mi propia configuración de validación para permitir esto, pero sospecho que interferirá con la forma en que funciona el resto de Devise si comienzo a agregar usuarios sin contraseñas o marcarlos con mi propio campo ''no registrado''.
Por el momento, la solución más fácil parece poner a estos usuarios en una mesa diferente, pero eso tiene un poco de olor. ¿Algunas ideas?
Tengo una aplicación que hace algo similar: utilizamos Open ID y OAuth exclusivamente para inicios de sesión, y mientras almacenamos la dirección de correo electrónico del usuario (la cuenta de Google o Facebook la envía de regreso durante la autenticación) nunca inician sesión usándola y entonces no tienen / necesita una contraseña
Esta es una devolución de llamada de lo que sucede cuando un usuario se registra a través de Facebook:
User.create!( :facebook_id => access_token[''uid''],
:email => data["email"],
:name => data["name"],
:password => Devise.friendly_token[0,20])
The Devise.friendly_token[...]
solo genera una contraseña aleatoria de 20 caracteres para el usuario, y estamos utilizando nuestro modelo de Usuario predeterminado con un Devise.friendly_token[...]
. Solo establecer la contraseña de manera similar para sus usuarios sería mi enfoque, ya que nunca usará su contraseña. Además, si alguna vez cambia de opinión y desea que puedan iniciar sesión, puede simplemente cambiar la contraseña de un usuario en la base de datos y crear un formulario de inicio de sesión, y el dispositivo se encargará del resto.
¿Otra opción más a la respuesta de Brett es anular la contraseña requerida? método en el modelo de Usuario.
def password_required?
super && provider.blank?
end
Si almacena más de un proveedor omniauth, algo como esto también debería funcionar.
def password_required?
super && self.omniauth_credentials.empty?
end
Todo el crédito a la transmisión de Ryan Bates en Devise y Omniauth por esta solución: http://railscasts.com/episodes/235-devise-and-omniauth-revised