rails link_to content_tag ruby-on-rails

ruby-on-rails - content_tag link_to rails



Diseñar el cierre de sesión automáticamente después del cambio de contraseña (8)

Actualización a Bill Eisenhauer respuesta arriba-

sign_in(current_account, :bypass => true) ha quedado obsoleto use bypass_sign_in current_account lugar

Se pueden encontrar más detalles aquí http://www.rubydoc.info/github/plataformatec/devise/Devise/Controllers/SignInOut#bypass_sign_in-instance_method

En Devise, si cambio la contraseña del usuario y después de que se actualiza en el db, el sitio cierra la sesión inmediatamente. No quiero este comportamiento, ¿cómo hago eso? por favor ayuda.


Agregue el siguiente fragmento de código a su método en el que está actualizando la contraseña del usuario, justo después de actualizar la contraseña del usuario en la base de datos:

def update . . . . .<your code> . . . . .<your code> sign_in(@user, :bypass => true) . . . . .<your code> . . . . .<your code> end


El ejemplo anterior no funcionó para mí usando múltiples ámbitos en Devise.

Tuve que agregar el nombre del alcance / recurso en la ruta de inicio de sesión para que funcione, y para evitar el caos, también tuve que cerrar la sesión del usuario anterior o de lo contrario abundaban todo tipo de confusión.

Los cambios que tuve que hacer se verían más o menos así utilizando el ejemplo anterior.

def update if current_account.update_with_password(params[:account]) sign_out(current_account) sign_in(:account, current_account, :bypass => true) flash[:notice] = ''Password updated.'' redirect_to account_path else render :action => :show end end

Editar para agregar: creo que tuve que cerrar la sesión forzosamente del usuario porque en algún lugar anulé el código de Devise para que los usuarios no se desconectaran durante ciertas acciones. En retrospectiva; ¡no es Buena idea! ¡Este enfoque es mucho mejor! Siendo que es más seguro crear sus propios Controladores versus reemplazar el código de Devise a menos que sea absolutamente inevitable.


Por alguna razón, current_user no es igual a @user aunque current_user.id es igual a @user.id Entonces tengo que usar sign_in(@user, :bypass => true) .


Simplemente puede configurar sign_in_after_reset_password en su devise.rb

config.sign_in_after_reset_password = true


Tuve el mismo problema y el siguiente código parece funcionar para mí.

Supongamos que el controlador de contraseñas está configurado para una ruta singleton. Además, suponga que el modelo autenticado es una Cuenta. Con eso, tienes lo siguiente:

def update if current_account.update_with_password(params[:account]) sign_in(current_account, :bypass => true) flash[:notice] = ''Password updated.'' redirect_to account_path else render :action => :show end end

El ingrediente clave es la llamada al método sign_in que intenta volver a iniciar sesión en la cuenta, pero evita las devoluciones de llamada del guardián y almacena la cuenta en la sesión.


Use este código para evitar cerrar la sesión.

sign_in(current_user, :bypass => true)