简体   繁体   中英

RoR - ArgumentError in SessionsController#create wrong number of arguments (1 for 2)

I am new to RoR and I am following this tutorial on making a user authentication system from scratch: http://railscasts.com/episodes/250-authentication-from-scratch . I've been hung up on this error message all weekend:

ArgumentError in SessionsController#create: wrong number of arguments (1 for 2). 

Here is the code from my sessions controller:

class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.authenticate(:email => params[:email], :password => params[:password])
    if user
        session[:user_id] = user.id
        redirect_to root_url, :notice => "Logged in!"
    else
        flash.now.alert = "Invalid email or password"
        render "new"
    end
  end
end

Here is the code from my user.rb model (The error message gives an extracted source on line #10 => def self.authenticate (email, password)

class User < ActiveRecord::Base

attr_accessor :password
validates_confirmation_of :password
validates_presence_of :email
validates_uniqueness_of :email
validates_presence_of :password, :on => :create # needed to move line up from below to. Cannot encrypt password without validating password
before_save :encrypt_password

def self.authenticate (email, password)
    user = find_by_email(email)
    if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
        user
    else
        nil
    end
end

def encrypt_password
    if password.present?
        self.password_salt = BCrypt::Engine.generate_salt
        self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
    end
end     

end

authenticate method in the model takes two parameters, but you're passing just one (a hash with two keys). Change it to:

User.authenticate(params[:email], params[:password])

The problem is in this line:

user = User.authenticate(:email => params[:email], :password => params[:password])

it should be

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM