我尝试在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
我不太确定问题是什么,所以任何帮助都会非常感谢,谢谢。
答案 0 :(得分:0)
我的回答者(修改用户模型):
class User < ApplicationRecord
has_secure_password
validates_uniqueness_of :email
end
使用has_secure_password
:
自动添加以下验证:
- 创建时必须出现密码
- 密码长度应小于或等于72个字符
- 确认密码(使用password_confirmation属性)
如果不需要密码确认验证,请忽略 password_confirmation的值(即不提供表单字段 为了它)。当此属性具有nil值时,验证将不会 被触发。
实际上密码会被加密,所以没人知道它只是用户自己。我可以理解为什么您控制电子邮件是唯一的,但密码不是必需的。