IIC2513-2015-1 / syllabus

Página principal del curso
6 stars 4 forks source link

No method error en clase User #20

Open FranLucchini opened 9 years ago

FranLucchini commented 9 years ago

Cree un método llamado authenticate en el controlador de los usuarios, aquí está el código:

def self.authenticate(name, submitted_password)
    user = find_by(username: name)
    if user.nil?
      return nil
    else
      if (user.password_hash == submitted_password)
        return user
      end
    end
  end 

y cuando lo uso para verificar que los datos ingresados en el login son correctos, me manda el error: "undefined method `authenticate' for #Class:0x007f19b18bd9f0" cuando lo uso en mi sessions_controller:

def create

    user = User.authenticate(params[:session][:username], params[:session][:password])

revisé muchas páginas y algunas decían que tenía que ver con bcrypt, pero no encontré algo que me sirva, alguna idea?

lopezjurip commented 9 years ago

Que raro :/ ¿Intentaste por la consola?

isseu commented 9 years ago

en el controlador de los usuarios

Tienes que hacerlo en el modelo de los usuarios, no en el controlador. Ya que estas haciendo User.authenticate

FranLucchini commented 9 years ago

Oh! Gracias. Y por qué hay que hacerlo ahí? Siento que hay algo que no me queda claro...

jicelhay commented 9 years ago

Si incluyes en el model de tu usuario has_secure_password Ni siquiera tienes que implementar los métodos, puedes usarlos asi.. tal cual.

isseu commented 9 years ago

Cuando tu pones User estas accediendo a la clase user, por lo que si escribes User.authenticate estas accediendo al método estatico de la clase User por lo que no tiene sentido ponerlo en el controlador (modelo y controlador son dos cosas muy distintas, independientes del otro totalmente)

Aunque como @jicelhay dice, si estas ocupando bcrypt no es necesario que tu hagas el método de autenticación ya que la gema te hace todo. Te recomiendo seguir este ejemplo.