[英]Password can't be blank, Bcrypt | rails 5.1.4
我的密碼驗證有問題! 當我將password和password_confirmation設置為特定值時,無論執行什么操作,都將顯示錯誤“ Password不能為空”。 這是我的遷移文件:
class CreateUsers < ActiveRecord::Migration[5.1]
def change
create_table :users do |t|
t.string :username
t.string :email
t.string :password_digest
t.string :first_name
t.string :last_name
t.integer :role_id, :default => 1
t.timestamps
t.boolean :newsletter_status
end
end
end
我的模型文件:
class User < ActiveRecord::Base
belongs_to :role
has_many :article
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true,
length: { minimum: 4 },
uniqueness: { case_sensitive: false },
format: { with: VALID_EMAIL_REGEX }
validates :first_name, presence: true,
length: { minimum: 3, maximum: 50 }
validates :last_name, presence: true,
length: { minimum: 3, maximum: 50 }
validates :username, presence: true,
length: { minimum: 3, maximum: 30 },
uniqueness: { case_sensitive: true }
validates :password, length: { minimum: 6, maximum: 100 }, allow_nil: true
has_secure_password
end
我的控制器文件:
class UsersController < ApplicationController
def new
@user = User.new
@user.role_id = 1
end
def create
@user = User.new(user_params)
@user.role_id = 1
if @user.save
flash[:notice] = "L'article à bien été créé"
redirect_to article_path(@article)
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :username, :email, :password, :password_confirmation, :role_id, :newsletter_status)
end
end
我的意見表:
<div class="row">
<div class="col-md-6 mb-3">
<%= f.label :password, "Mot de passe" %>
<%= f.password_field :password, class: "form-control", placeholder: "Mot de passe" %>
</div>
<div class="col-md-6 mb-3">
<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation, class: "form-control", placeholder: "Mot de passe" %>
</div>
</div>
無論我做什么,都無法創建用戶。 如果我在Rails控制台中執行user = User.new並輸入所有參數,它仍然會在errors.full_messages中寫密碼,不能為空:
2.3.4 :021 > user = User.create(first_name: 'Name', last_name: 'Surname', email: 'email@example.com', username: 'Username', password: 'password', password_confirmation: 'password', newsletter_status: true)
(0.1ms) begin transaction
Role Load (0.3ms) SELECT "roles".* FROM "roles" WHERE "roles"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
User Exists (0.1ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER(?) LIMIT ? [["email", "email@example.com"], ["LIMIT", 1]]
User Exists (0.1ms) SELECT 1 AS one FROM "users" WHERE "users"."username" = ? LIMIT ? [["username", "Username"], ["LIMIT", 1]]
(0.1ms) rollback transaction
=> #<User id: nil, username: "Username", email: "email@example.com", password_digest: nil, first_name: "Name", last_name: "Surname", role_id: 1, created_at: nil, updated_at: nil, newsletter_status: true>
2.3.4 :022 > user.errors.full_messages
=> ["Password can't be blank"]
我正處於5.1.4和ruby 2.3.3的軌道上,謝謝!
嘗試將has_secure_password
設置為超出您的驗證規則。
如果allow_nil: true
是為了讓用戶無需輸入密碼即可更新其其他信息,請嘗試使用allow_blank: true
代替。
最后,根據文檔,bcrypt的最大長度為72,因此您可以刪除驗證的最大長度部分。 http://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html
遷移文件有問題。
您尚未為密碼創建行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.