2015-06-17 18 views
5

Tôi đang gặp sự cố với đồ đạc cho mật khẩu BCrypt: Mô hình User của tôi vừa được thiết lập với has_secure_passwordvalidates_presence_of :password.Đồ đạc đường ray với BCrypt

Vấn đề là BCrypt sử dụng passwordpassword_confirmation nhưng trong lược đồ chỉ có trường password_digest.

Lịch thi đấu phàn nàn rằng trường password không tồn tại.

Làm cách nào để tránh điều này?

Cảm ơn bạn

+0

bạn có thể đăng giản đồ của mình không? – Emanuel

+1

... và có thể hiển thị cho chúng tôi lịch thi đấu không hoạt động. Xin lỗi vì đã khiến bạn làm rất nhiều việc nhưng nó giúp chúng tôi dễ dàng hơn nếu chúng tôi có thể xem các nội dung như mã và thông báo lỗi thực tế (khiếu nại). –

Trả lời

-1

Tôi đã giải quyết vấn đề này với chức năng thiết lập trên thử nghiệm mô hình. Chúng tôi có thể xác định các đối tượng trong quá trình thiết lập và sử dụng nó thông qua tệp thử nghiệm.

def setup 
    @user = User.new 
    @user.name = 'Brunoid' 
    @user.email = '[email protected]' 
    @user.phone = '(01)2345-6789' 
    @user.cpf = '123.456.789-10' 
    @user.password = 'segamastersystem' 
    @user.password_confirmation = 'segamastersystem' 
    @user.card = Card.first 
end 

test 'must validate' do 
    assert @user.valid? 
end 
... 
9

Có vẻ như là đồ đạc đang được đẩy lên cơ sở dữ liệu trực tiếp. Điều đó có nghĩa rằng thay vì password: bạn cần password_digest: trong đồ đạc của bạn:

test_user: 
    email: "[email protected]" 
    password_digest: <%= BCrypt::Password.create('testpassword', cost: 5) %> 

khi sử dụng mật khẩu dựa bcrypt với has_secure_password. Như đã đề cập trong các ý kiến, đối số cost là tùy chọn. Nếu bạn không sử dụng nó, một mặc định hợp lý sẽ được sử dụng.

+0

'chi phí' là tùy chọn, vì vậy' BCrypt :: Password.create ('password') 'hoạt động – Dorian

+0

@Dorian - vâng, đúng vậy. Tôi thích đặt giá trị một cách rõ ràng mặc dù. Tiết kiệm cho tôi nhớ những gì mặc định là và tự hỏi liệu nó được tối ưu hóa cho an ninh hoặc hiệu quả ;-) – silverdr

Các vấn đề liên quan