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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top