Diseñar el restablecimiento de contraseña desde la consola de Rails

92

Mientras se ejecuta una aplicación, ¿cómo se selecciona un usuario por dirección de correo electrónico y luego se configura la contraseña manualmente dentro rails consolede Devise?

Además, ¿a dónde debería ir para revisar la documentación para cubrir más detalles sobre la manipulación de cuentas mientras uso Devise?

iluminar
fuente
Valk: donde () no está disponible hasta los rieles 3. Pero, la forma en que lo hizo también está bien.
Hellion

Respuestas:

140

Es más o menos como lo describiste :-)

# use mongoid
class User
  include Mongoid::Document
end


# then
user = User.where(email: '[email protected]').first

if user
  user.password = new_password
  user.password_confirmation = new_password
  user.save
end

Actualización de 6 años después :)

El dispositivo moderno permite una sintaxis más simple, sin necesidad de establecer el campo de confirmación

user.password = new_password; user.save
# or
user.update_attributes(password: new_password)
Sergio Tulentsev
fuente
Ah, hmm. Eso funcionaría para un usuario estándar, pero en este caso es de la tabla admin_users. ¿Cuál es el ajuste apropiado para extraer de esta tabla frente a los usuarios? Simplemente configurándolo en user = AdminUser ... no funcionó.
ylluminate
Umm, no lo sé, ¿consulta el modelo AdminUser? En cuanto a mí, siempre almacené a todos los usuarios en las mismas tablas, con el atributo 'roles' asignado.
Sergio Tulentsev
Puede cambiar el nombre de la colección a la que hace referencia el modelo con el método store_in. Entonces, para buscar en la tabla admin_users, tendría que agregar User.store_in 'admin_users' antes de ese código. (esta respuesta implica el uso de Mongoid)
Sergio Tulentsev
Intentado User.store_in 'admin_users'sin embargo recibido undefined method. Aparentemente, no puedo acceder a la mesa, ya que cada vez obtengo un cero. ¿Qué hay de consultar toda la tabla y obtener todas las entradas en ella inicialmente para probar y ver si estoy ingresando a esa tabla inicialmente? (Trabajando en MySQL aquí, sin embargo, eso no debería importar con ActiveRecord.)
ylluminate
: store_in es parte de Mongoid gem. Puede obtener acceso al controlador ruby ​​de nivel bajo (er) llamando a User.db
Sergio Tulentsev
55
# $ rails console production
u=User.where(:email => '[email protected]').first
u.password='userpassword'
u.password_confirmation='userpassword'
u.save!
Eric Guo
fuente
1
devise se hornea en rieles por lo que el uso de la confirmación pw es redundante. User.find_by_email('[email protected]').update_attributes(:password => 'password')
copremesis
27

Si ejecuta lo siguiente en la consola de rieles, debería funcionar:

User.find_by(email: 'user_email_address').reset_password!('new_password','new_password')

http://www.rubydoc.info/github/plataformatec/devise/Devise/Models/Recoverable

gstraehle
fuente
6
Tenga en cuenta que el signo de exclamación está obsoleto, es solo:User.find_by(email: 'user_email_address').reset_password('new_password','new_password')
IrishDubGuy
1
También tenga en cuenta que debe ingresar una contraseña válida que confirme los requisitos de contraseña en la configuración de su dispositivo.
zwippie
5

Simplemente puede actualizar el campo de contraseña, sin necesidad de confirmación de contraseña, devise lo guardará en forma cifrada

u = User.find_by_email('[email protected]')
u.update_attribute(:password, '123123')
Kshitij
fuente
3

Por alguna razón, (Rails 2.3 ??)

user = User.where(:email => email).first

no funcionó para mí, pero

user = User.find_by_email('[email protected]')

lo hizo.

valk
fuente
La razón de esto es que el dónde (); El método aún no estaba en los rieles 2.3, solíamos usar el hallazgo (: todos,: condiciones => condiciones) en los días.
dennis
3

1.Inicia sesión en la consola ralis

$ sudo bundle exec rails console production

2.A continuación, actualice la contraseña del administrador.

irb(main):001:0> user = User.where("username = 'root'")
irb(main):002:0> u = user.first
irb(main):003:0> u.password="root2014@Robin"
=> "root2014@Robin"
irb(main):004:0> u.password_confirmation="root2014@Robin"
=> "root2014@Robin"
irb(main):005:0> u.save
=> true
irb(main):006:0> exit

3.Actualice la página de inicio de sesión, use la nueva contraseña para iniciar sesión, ¡disfrute!

¡Buena suerte!

Robinwen
fuente
devise está integrado, por lo que el uso de la confirmación pw es redundante. User.find_by_email('[email protected]').update_attributes(:password => 'password')
copremesis
0

Si su cuenta está bloqueada por demasiados intentos de inicio de sesión, es posible que también deba hacer:

user.locked_at = ''
user.failed_attempts = '0'
user.save!
Enzio
fuente