authlogic and NameError "undefined local variable or method `login'"

Hi! I am using authlogic and I have a User model (with act_as_authentic) without the "login" field, since I use "email" as the user name. As it says in the authlogic documentatation, that should be the way it works when there is no login field.

When I create new users manually via the User -> new form, everythings works fine.

But:

Now I'd like to add user accounts as a side effect when anonymous users fill in a form (actually it's the "new" form for an entity called SearchSubscription).

Now, in my SearchSubscription class, I have this "before_create :assign_user" callback:

def assign_user if self.user_id.nil? # find user with the given email address. If not present, create new user. user = User.find(:first, :conditions => {:email => self.email}) if !user.nil? self.user_id = user.id else # User not found, so create one randompassword = Base64.encode64(Digest::SHA1.digest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}/#{login}"))[0..7] user = User.create(:email => self.email, :password => randompassword, :location => self.location) if user.id self.user_id = user.id else flash[:warning] = "Could not create user account" end end end end

This works well for email addresses that have a user entry. But whenever I try to create a new SearchSubscription with an unknown email address, I get the following error:

NameError (undefined local variable or method `login' for #<SearchSubscription:0x104099750>):   app/models/search_subscription.rb:26:in `assign_user'   app/controllers/search_subscriptions_controller.rb:21:in `create'

I have the impression that somewhere, the "User" class requires the login. But I don't want to maintain a login field, since I want to use the email address for that.

Any ideas?

Thanks!

Marian

Hi! I am using authlogic and I have a User model (with act_as_authentic) without the "login" field, since I use "email" as the user name. As it says in the authlogic documentatation, that should be the way it works when there is no login field.

When I create new users manually via the User -> new form, everythings works fine.

But:

Now I'd like to add user accounts as a side effect when anonymous users fill in a form (actually it's the "new" form for an entity called SearchSubscription).

Now, in my SearchSubscription class, I have this "before_create :assign_user" callback:

def assign_user if self.user_id.nil? # find user with the given email address. If not present, create new user. user = User.find(:first, :conditions => {:email => self.email}) if !user.nil? self.user_id = user.id else # User not found, so create one randompassword = Base64.encode64(Digest::SHA1.digest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}/#{login}"))[0..7]

What is that login doing in the line above I wonder? I am not quite sure what the [0..7] is for either.

    user = User\.create\(:email =&gt; self\.email, :password =&gt;

randompassword, :location => self.location) if user.id self.user_id = user.id else flash[:warning] = "Could not create user account" end end end end

This works well for email addresses that have a user entry. But whenever I try to create a new SearchSubscription with an unknown email address, I get the following error:

NameError (undefined local variable or method `login' for #<SearchSubscription:0x104099750>):

The clue is in the error message, it is SearchSubscription that it is complaining about, not User.

Colin

Base64.encode64(Digest::SHA1.digest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}/#{login}"))[0..7]

What is that login doing in the line above I wonder? I am not quite sure what the [0..7] is for either.

Stupid me. I took that snippet some web page and didn't even notice that it uses a variable I don't have. :frowning:

The [0..7] might be another way of doing a substring.

NameError (undefined local variable or method `login' for #<SearchSubscription:0x104099750>):

The clue is in the error message, it is SearchSubscription that it is complaining about, not User.

Colin, thank you very much! I replaced #{login} with #{self.email} and now it works.

Marian

Base64.encode64(Digest::SHA1.digest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}/#{login}"))[0..7]

What is that login doing in the line above I wonder? I am not quite sure what the [0..7] is for either.

Stupid me. I took that snippet some web page and didn't even notice that it uses a variable I don't have. :frowning:

The [0..7] might be another way of doing a substring. Is it not?

NameError (undefined local variable or method `login' for #<SearchSubscription:0x104099750>):

The clue is in the error message, it is SearchSubscription that it is complaining about, not User.

Colin, thank you very much! I replaced #{login} with #{self.email} and now it works.

Marian

Base64.encode64(Digest::SHA1.digest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}/#{login}"))[0..7]

What is that login doing in the line above I wonder? I am not quite sure what the [0..7] is for either.

Stupid me. I took that snippet some web page and didn't even notice that it uses a variable I don't have. :frowning:

The [0..7] might be another way of doing a substring.

NameError (undefined local variable or method `login' for #<SearchSubscription:0x104099750>):

The clue is in the error message, it is SearchSubscription that it is complaining about, not User.

Colin, thank you very much! I replaced #{login} with #{self.email} and now it works.

Marian

Base64.encode64(Digest::SHA1.digest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}/#{login}"))[0..7]

What is that login doing in the line above I wonder? I am not quite sure what the [0..7] is for either.

Stupid me. I took that snippet some web page and didn't even notice that it uses a variable I don't have. :frowning:

The [0..7] might be another way of doing a substring.

Yes, I realised that just after I posted. It is not a syntax that I use regularly.

Colin