Una aplicación que heredé tiene la siguiente acción para actualizar el perfil de un usuario:¿Cómo escribo y pruebo los cambios de contraseña cuando uso Authlogic?
class UsersController < ApplicationController
# ...
def update
@user = current_user
if @user.update_attributes(params[:user])
flash[:notice] = "Successfully updated profile."
redirect_to root_url
else
flash[:error] = "Hrm, something went wrong."
render :action => 'edit'
end
end
end
La forma que PUT
s (realmente POST
s con un _method=PUT
) hasta que la acción tiene un campo password
y password_confirmation
, pero ningún campo old_password
. Me di cuenta a través de las pruebas que ni siquiera tengo que completar el campo password_confirmation
.
Primera pregunta: ¿hay una manera más establecida de hacer un cambio de contraseña cuando se utiliza Authlogic?
Segunda pregunta: ¿hay literatura sobre mejores prácticas (especialmente desde el punto de vista de la usabilidad) sobre cambios de contraseña? ¿Debería ser un formulario separado, no mezclado con otros campos de usuario?
Tercera pregunta: la mayoría de los sitios tienen un campo old_password
, pero Authlogic no parece ser compatible de forma nativa. ¿Cuál es la manera Authlogic-ey de confirmar que, en realidad, el usuario mismo está cambiando la contraseña en lugar de alguien que ha pirateado su sesión?
La razón por la que tuve problemas para obtener la contraseña para actualizar es que estaba haciendo '{@user = Factory (: user), UserSession.create (@user))} 'en un bloque de configuración general, luego haciendo' {@user = Factory (: user)} 'de nuevo en un bloque de configuración interno y comprobando el cambio de contraseña en ese usuario, pero realmente cambiándolo en el externo. D'oh! –