Carriles 3 - Diseñar: Cómo saltarse el 'current_password' al editar un registro?
-
29-09-2019 - |
Pregunta
He implementado OmniAuth con mi modelo de legado, para que pueda autenticar el uso de otros servicios. La contraseña no es necesario hacer eso para mi modelo, ya que los usuarios pueden autenticarse usando Twitter, Facebook ...
Todo está trabajando muy bien, pero, cuando un intento usuario editar su registro, legado omitir el proceso porque el usuario no informó a la 'current_password' (que no lo existe en algunos casos ahora).
I creado un controlador de registro para sobrescribir los legados uno:
class RegistrationsController < Devise::RegistrationsController
def update
super
end
end
Pero no he encontrar ninguna documentación sobre cómo omitir la verificación de la contraseña, ¿cómo podría hacerlo en mi acción de actualización?
Solución
Similar al anterior, trate de poner esto en su modelo de usuario:
# bypasses Devise's requirement to re-enter current password to edit
def update_with_password(params={})
if params[:password].blank?
params.delete(:password)
params.delete(:password_confirmation) if params[:password_confirmation].blank?
end
update_attributes(params)
end
Otros consejos
Los siguientes trabajó para mí:
En mi controlador de usuarios, en la acción de actualización, tengo
params[:user].delete(:password) if params[:user][:password].blank?
params[:user].delete(:password_confirmation) if params[:user][:password_confirmation].blank?
Tal vez usted podría adaptarse a una devolución de llamada que before_save
?
A pesar de la respuesta ha estado aquí por un tiempo Quiero publicar una nueva, ya que creo que la respuesta seleccionada tiene un pequeños defectos. Tal vez no tenía en el momento en que se creó la respuesta, pero ahora en 2013
, la respuesta sería la siguiente:
La solución sería crear en el modelo User
como esto:
# bypass re-entering current password for edit
def update_with_password(params={})
current_password = params.delete(:current_password)
if params[:password].blank?
params.delete(:password)
params.delete(:password_confirmation) if params[:password_confirmation].blank?
end
update_attributes(params)
clean_up_passwords
end
hay una respuesta fácil, que no sé cuando tenía legado por primera vez este método, pero con sólo añadir
Model.update_without_password(params)
se actualizará atributos sin necesidad de contraseña actual.
A partir del legado v4.6.2 . Es muy fácil de hacer.
documentación dicho aquí:
Por defecto queremos requerir una contraseña controles de actualización. Usted puede sobrescribir este método en su propia RegistrationsController.
Esto significa, en su controlador reemplazar el método update_resource
para reemplazar update_with_password
con update_without_password
:
class Users::RegistrationsController < Devise::RegistrationsController
# ...
protected
def update_resource(resource, params)
resource.update_without_password(params)
end
end