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)
Utilice el módulo de registro, que le dará a ambos inscribirse y editar las características del usuario
https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-password