Minimum password standards

一般來說會強制密碼設定要達到一些最低標準,關於增強密碼的選擇可以參考 enforcing password strength in Rails

這邊就用最簡單的做法,限制密碼最低的長度以及密碼不能為空值,先來寫個測試:

test/models/user_test.rb

test "password should be present (nonblank)" do
  @user.password = @user.password_confirmation = " " * 6
  assert_not @user.valid?
end

test "password should have a minimum length" do
  @user.password = @user.password_confirmation = "a" * 5
  assert_not @user.valid?
end

這邊使用了雙重賦值,同時為 passwordpassword_confirmation 指派值:

@user.password = @user.password_confirmation = "a" * 5

前面設定 email 時,也在 model 做了同樣的驗證設定:

validates :password, length: { minimum: 6 }

雖然 has_secure_password 方法有提供 presence validation,但它只提供驗證 empty passwords,而非 blank passwords,也就是說它允許使用者建立像 ' ' 這樣包含空格的無效密碼,所以我們必須多加一個參數 presence ,以確保不會出現像這樣無效的空格密碼:

app/models/user.rb

validates :password, presence: true, length: { minimum: 6 }

emptyblank 其實是有差別的,empty 表示 nothingblank 表示存在這個值,只不過它只包含空格。

執行測試,會顯示通過(Green):

$ bundle exec rake test:models