使用Bcrypt进行用户身份验证

时间:2017-08-17 08:45:08

标签: ruby-on-rails authentication bcrypt

我尝试在Rails(5.1.2)中使用Bcrypt(3.1.11)和has_secure_password进行基本用户身份验证。它应该是非常简单的,但似乎不是!

我几乎复制了Railscast中的所有代码,因此代码应该准确,但错误消息告诉我:

ActiveRecord::StatementInvalid in UsersController#create
SQLite3::SQLException: no such column: users.password: SELECT 1 AS one FROM "users" WHERE "users"."password" = ? LIMIT ?

以下是UsersController#create

的代码
def create
  @user = User.new(user_params)
  if @user.save
    session[:user_id] = @user.id
    redirect_to root_url, notice: "Thank you for signing up!"
  else
    render "new"
  end
end

和强烈的参数:

private
def user_params
  params.require(:user).permit(:email, :password, :password_confirmation)
end

和用户模型:

class User < ApplicationRecord
 has_secure_password
 validates_uniqueness_of :email, :password, :password_confirmation
end

我不太确定问题是什么,所以任何帮助都会非常感谢,谢谢。

1 个答案:

答案 0 :(得分:0)

我的回答者(修改用户模型):

class User < ApplicationRecord
 has_secure_password
 validates_uniqueness_of :email
end

使用has_secure_password

  

自动添加以下验证:

     
      
  • 创建时必须出现密码
  •   
  • 密码长度应小于或等于72个字符
  •   
  • 确认密码(使用password_confirmation属性)
  •   
     

如果不需要密码确认验证,请忽略   password_confirmation的值(即不提供表单字段   为了它)。当此属性具有nil值时,验证将不会   被触发。

实际上密码会被加密,所以没人知道它只是用户自己。我可以理解为什么您控制电子邮件是唯一的,但密码不是必需的。