tutorial tokens rails hacer gema como auth ruby-on-rails devise subscribe

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