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
這邊使用了雙重賦值,同時為 password 和 password_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 }
empty 跟 blank 其實是有差別的,empty 表示 nothing,blank 表示存在這個值,只不過它只包含空格。
執行測試,會顯示通過(Green):
$ bundle exec rake test:models