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 .