Ruby on rails 如何使用RubyonRails创建用户和登录/注销会话

Ruby on rails 如何使用RubyonRails创建用户和登录/注销会话,ruby-on-rails,login,Ruby On Rails,Login,我是rails的新手,我正在尝试构建一个简单的网站,它需要创建能够登录和注销的用户 但是当创建用户时,我得到 UsersControllercreate中的ArgumentError 1的参数2的数目错误 当我尝试登录到我得到的位置时也会发生这种情况 SessionControllerCreate中的ArgumentError 1的参数2的数目错误 有没有关于如何解决这个问题的想法? 用户的模型如下所示 Class User < ActiveRecord::Base attr_access

我是rails的新手,我正在尝试构建一个简单的网站,它需要创建能够登录和注销的用户 但是当创建用户时,我得到 UsersControllercreate中的ArgumentError 1的参数2的数目错误 当我尝试登录到我得到的位置时也会发生这种情况 SessionControllerCreate中的ArgumentError 1的参数2的数目错误

有没有关于如何解决这个问题的想法? 用户的模型如下所示

Class User < ActiveRecord::Base
attr_accessor :password

#validation for password on creation.
validates :password, :presence => true,
                  :confirmation => true,
                  :length => {:within => 6..40},
                  :on => :create

#validation for password on update, forget password option
validates :password, :confirmation => true,
                  :length => {:within => 6..40},
                  :on => :update

validates :user_name, presence: true,
                    uniqueness: true

validates :status, presence: true

before_save :encrypt_password

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

def self.authenticate(user_name, password)
    user = find_by_user_name(user_name)   
    if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
      #authenticate
      user
    else
      # la2 :(
        nil
    end
end

end
以及用户控制器:

class UsersController < ApplicationController


def new
  @user = User.new
  end

  def create
  @user = User.new(user_params)
  if @user.save
    redirect_to root_url, :notice => "Signed up!"
  else
    render "new"
  end
  end


  private

  def user_params
    params.require(:user).permit(:user_name, :status, :password, :password_confirmation)
  end

end
关于会议,它没有模型 其中,会话控制器如下所示:

class SessionsController < ApplicationController
def new
end

def create
  user = User.authenticate(params[:user_name], 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

def destroy
  session[:user_id] = nil
  redirect_to root_url, :notice => "Logged out!"
end

end

一般来说,使用自己的安全机制是个坏主意


我强烈建议您在保存之前检查回拨,密码似乎为空