NoMethodError undefined method `password' for #<User:0x102295b28>

Hey all,

I'm following the Authenticating Your Users Recipe in Rails recipes, which is a bit outdated I know.

It says run a migration:

  def self.up     create_table :users do |t|       t.column "username", :string       t.column "password_salt", :string       t.column "password_hash", :string     end   end

And then create a form:

<% form_for @user, :url => { :action => "signup" } do |f| %>

  <%= f.label(:username, "username")%>   <%= f.text_field(:username) %><br/>   <%= f.label(:password, "password")%>     <%= f.password_field(:password) %><br/>     <%= f.submit("Sign Up")%>

<% end %> #Note that he's using the now defunct start_from_tag

Problem is because I don't have a password field in users table in database, I think it gives undefined method error for password when I pass as argument in the password_field() method. However, in the book, he does exactly that and it works for him.

Is there anything I'm doing wrong?

Thanks for response.

What's your model look like? You'll want the following in your User model...

attr :password

And some hooks to convert that into password_hash I suppose as well...

-philip

John Merlino wrote in post #968183:

Hey all,

I'm following the Authenticating Your Users Recipe in Rails recipes, which is a bit outdated I know.

It says run a migration:

  def self.up     create_table :users do |t|       t.column "username", :string       t.column "password_salt", :string       t.column "password_hash", :string     end   end

And then create a form:

<% form_for @user, :url => { :action => "signup" } do |f| %>

  <%= f.label(:username, "username")%>   <%= f.text_field(:username) %><br/>   <%= f.label(:password, "password")%>     <%= f.password_field(:password) %><br/>     <%= f.submit("Sign Up")%>

<% end %> #Note that he's using the now defunct start_from_tag

Problem is because I don't have a password field in users table in database, I think it gives undefined method error for password when I pass as argument in the password_field() method. However, in the book, he does exactly that and it works for him.

Is there anything I'm doing wrong?

The example should never have worked, unless he's relying on some particular authentication library (or an attr_accessor call) to create the password method.

However, you're doing two things wrong here: * Following an outdated book * Trying to roll your own authentication library -- just go with Authlogic or Devise.

Thanks for response.

Best,

However, you're doing two things wrong here: * Following an outdated book * Trying to roll your own authentication library -- just go with Authlogic or Devise.

This is for a personal project that doesn't require rapid development. I'm just trying to build my own authentication system so I can better understand the Rails environment. Like you said, perhaps he's declaring a setter and getter method of the User class with the identifier of "password". Nevertheless nowhere is it explained how to translate this to a password hash in this book. I looked at the Advanced Recipes book and it doesn't cover authentication at all.