2010-09-10 9 views
28

Estoy probando cómo Devise trabaja con uno de mis proyectos para autenticación de usuarios. Existe un requisito de usuario que su administrador debe poder generar un lote de nombre de usuario y contraseña de usuario de vez en cuando, y luego el administrador enviará por correo electrónico el nuevo nombre de usuario y contraseña a sus usuarios.Cómo generar contraseñas automáticamente en Rails Devise?

Supongamos que el administrador tiene el conocimiento de SQL directo en la base de datos MySQL, ¿cómo pueden los nombres de usuario/contraseñas generados reconocidos por Devise? ¡Gracias!

Respuesta

73

Utilice el método Devise.friendly_token:

password_length = 6 
password = Devise.friendly_token.first(password_length) 
User.create!(:email => '[email protected]', :password => password, :password_confirmation => password) 

FYI: Devise.friendly_token devuelve un token de 20 caracteres. En el ejemplo anterior, estamos cortando los primeros caracteres password_length del token generado utilizando el método String#first que proporciona Rails.

6

Una opción sería usar Devise.generate_token. Es decir.

password = User.generate_token('password') 
User.create!(:email => '[email protected]', :password => password, :password_confirmation => password) 

Esta opción no ha estado disponible en Devise desde hace bastante tiempo. Por favor, consulte la otra respuesta (friendly_token).

+4

Esto ya no parece funcionar en la última versión. Obtengo un error de 'método protegido' para generar_token. –

+0

no funciona en las últimas versiones –

+0

En este momento, querrá usar 'Devise.token_generator'. – typeoneerror

0

(advertencia rápida: No soy rieles NEWB)

Probé la generate_token pero no hace lo que piensa (miro a los docs)

(estoy usando los carriles 3.0. 5, e idear 1.1.7)

lo que encontré es que maquinan generará todo eso para usted en el fondo cuando lo hace:

User.create!(:email => "[email protected]", :password => "password") 

Diseñar debe crear el encrypted_password y sa Para ti. (Pop abrir una consola y probarlo por ahí)

+0

El OP preguntaba cómo "generar" nuevas contraseñas automáticamente para nuevos usuarios. Lo que está haciendo aquí es establecer la contraseña de cada usuario nuevo en "contraseña". Claro que está encriptado en la base de datos, pero vas a ser muy vulnerable a los ataques de diccionario (adivinar). Si en su lugar genera contraseñas únicas utilizando tokens (es decir, generate_token), es extremadamente seguro ya que estos tokens son bastante largos y complicados (tipos de caracteres mixtos, no basados ​​en diccionario, etc.). –

+0

Me parece que está preguntando cómo puede ingresar las contraseñas y los nombres de usuario generados, y que Devise los maneje. Él específicamente pregunta: "¿cómo pueden los nombres de usuario/contraseñas generados reconocidos por Devise?" lo cual interpreté como que ya tenemos una lista generada de nombres de usuario y contraseñas, pero no sé cómo insertar esa información en la base de datos para que el dispositivo la reconozca. Lo que estoy mostrando arriba es simplemente que todo el cifrado en segundo plano y tal será manejado por Devise, sin necesidad de pasar por el DB back-end. –

+0

Y estaba __definitely__ ** NOT ** sugiriendo que usen "contraseña" para cada nuevo usuario. Espero que no sea la forma en que se encontró. De hecho, es una forma increíblemente pobre de agregar nuevos usuarios. Originalmente pensé que el 'generate_token' era para generar el encrypted_password, ya que el OP insinuaba tener acceso directo al DB (puenteando ActiveRecord todos juntos). –

Cuestiones relacionadas