2015-06-17 26 views
5

Mam problem z urządzeniami do hasła BCrypt: mój model User jest zarówno konfigurowany z has_secure_password i validates_presence_of :password.Oprawy szyn z BCryptem

Chodzi o to, że BCrypt używa password i password_confirmation, ale w schemacie jest tylko pole password_digest.

Oprawa narzeka, że ​​pole password nie istnieje.

Jak mogę tego uniknąć?

Dziękujemy

+0

Czy możesz opublikować swój schemat? – Emanuel

+1

... i może pokazać nam urządzenie, które nie działa. Przepraszamy za to, że wykonujesz tyle pracy, ale znacznie ułatwia nam to pomoc, jeśli widzimy takie rzeczy jak kod i rzeczywiste komunikaty o błędach (skargi). –

Odpowiedz

-1

Rozwiązałem ten problem za pomocą funkcji konfiguracji w teście modelu. Możemy definiować obiekty w ustawieniach i używać ich poprzez plik testowy.

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

Wygląda na to, że urządzenia są bezpośrednio przekazywane do bazy danych. Oznacza to, że zamiast password: trzeba password_digest: w swoich lamp:

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

przy użyciu haseł opartych bcrypt z has_secure_password. Jak wspomniano w komentarzach argument cost jest opcjonalny. Jeśli go nie użyjesz, zostanie użyta rozsądna wartość domyślna.

+0

"koszt" jest opcjonalny, więc 'BCrypt :: Password.create ('password')' działa – Dorian

+0

@Dorian - tak, robi. Wolę jednak jawnie ustawić wartość. Oszczędza mi pamięć o tym, co jest domyślne i zastanawia się, czy jest zoptymalizowany pod kątem bezpieczeństwa lub wydajności ;-) – silverdr