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?


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: 'joe@example.com').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)

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 => 'usermail@gmail.com').first
u.password='userpassword'
u.password_confirmation='userpassword'
u.save!

1
devise se hornea en rieles por lo que el uso de la confirmación pw es redundante. User.find_by_email('joe@example.com').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


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('user@example.com')
u.update_attribute(:password, '123123')

3

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

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

no funcionó para mí, pero

user = User.find_by_email('user@example.com')

lo hizo.


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!


devise está integrado, por lo que el uso de la confirmación pw es redundante. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis

2
User.find_by_email('joe@example.com').update_attributes(:password => 'password')

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!
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.