rails generate example español ejemplos ruby-on-rails devise login-control

ruby on rails - generate - Rails Devise: configura el token de restablecimiento de contraseña y redirige al usuario



devise session controller (4)

Puedes llamar

user.send(:set_reset_password_token)

Puede que no sea estable, ya que es un método protegido pero puede funcionar para su caso. Solo cúbrelo con una prueba.

(probado en Devise v. 3.4)

En mi aplicación para un caso de uso determinado, creo un nuevo usuario (programáticamente establezco la contraseña) y les envío un correo electrónico de confirmación.

Me gustaría que puedan cambiar su contraseña inmediatamente después de confirmar (sin tener que ingresar el sistema generado que no quiero enviar)

En efecto, me gustaría
1) El sistema crea una nueva cuenta de usuario con la contraseña generada.
2) El sistema envía un correo electrónico de confirmación.
3) El usuario hace clic en la confirmación y se le redirige para ingresar su contraseña (de hecho, los envía a una URL como la de abajo)

<a href="http://localhost:3000/users/password/edit?reset_password_token=v5Q3oQGbsyqAUUxyqLtb">Change my password</a>

Cualquier ayuda / punteros sería genial.


En Rails 4.1, la siguiente modificación de la respuesta de Anatortoise House funciona:

user = User.new user.password = SecureRandom.hex #some random unguessable string raw_token, hashed_token = Devise.token_generator.generate(User, :reset_password_token) user.reset_password_token = hashed_token user.reset_password_sent_at = Time.now.utc user.email = ''[email protected]'' user.save! # Use a mailer you''ve written, such as: AccountMailer.set_password_notice(user, raw_token).deliver

La vista de correo electrónico tiene este enlace:

www.oursite.com/users/password/edit?initial=true&reset_password_token=<%= @raw_token %>


Aquí está mi fragmento para la vista previa de correo

class Devise::MailerPreview < ActionMailer::Preview def reset_password_instructions user = User.last token = user.send(:set_reset_password_token) Devise::Mailer.reset_password_instructions(user, token) end end


Una forma sencilla de tener solo un paso para que los usuarios confirmen la dirección de correo electrónico y configuren la contraseña inicial utilizando el enlace que propusieron ...

Envíe un correo electrónico que genere su aplicación, que incluya un reset_password_token, y considere la posesión por parte del usuario de esa confirmación simbólica de la validez de esa dirección de correo electrónico.

En el código de generación de cuenta del sistema, suponiendo que el modelo de usuario está configurado con: recuperable y: database_authenticatable Diseñar módulos ...

acct = User.new acct.password = User.reset_password_token #won''t actually be used... acct.reset_password_token = User.reset_password_token acct.email = "[email protected]" #assuming users will identify themselves with this field #set other acct fields you may need acct.save

Haga que la contraseña de restablecimiento del diseño se vea un poco más clara para los usuarios al establecer la contraseña inicial.

views / idear / contraseñas / edit.html.erb

... <%= "true" == params[:initial] ? "Set your password" : "Reset your password" %> ...

Correo Electrónico Generado

Hi <%= @user.name %> An account has been generated for you. Please visit www.oursite.com/users/password/edit?initial=true&reset_password_token=<%= @user.reset_password_token %> to set your password.

No es necesario incluir: módulo Devise confirmable en su modelo de Usuario, ya que no se accederá a las cuentas creadas por su aplicación sin el reset_password_token en el correo electrónico.

Devise gestionará el envío y borrará el campo reset_password_token.

Consulte devise_gem_folder/lib/devise/models/recoverable.rb y database_authenticatable.rb para obtener más información sobre el método reset_password_token y sus amigos.

Si desea utilizar Devise :confirmable módulo :confirmable lugar de este enfoque, consulte la página wiki de Devise .