簡體   English   中英

密碼不能為空,Bcrypt | 導軌5.1.4

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM