2016-04-30 7 views
1

Ich bekomme den Fehler "nicht initialisierte Konstante Benutzer :: BCrypt".nicht initialisierte Konstante Benutzer :: BCrypt (version bezogen?)

geprüft ich diese Frage: https://github.com/ryanb/nifty-generators/issues/68

vorgeschlagene Lösung installieren zu bündeln funktioniert nicht (natürlich, ich bündeln installieren häufig).

geprüft ich diese Frage: https://github.com/codahale/bcrypt-ruby/issues/89

vorgeschlagene Lösung den Edelstein zu ändern mein Juwel auf eine neuere Version zu ‚bcrypt-Rubin‘ statt nur ‚bcrypt‘ nicht aktualisiert, aber löst nicht das Problem.

Hier ist mein User-Modell

class User < ActiveRecord::Base 
    validates :username, :password_digest, :session_token, presence: true 
    validates :session_token, uniqueness: true 
    attr_reader :password 

    def self.find_by_credentials(username, password) 
    user = User.find_by_username(username) 
    user.try(:valid_password?, password) ? user : nil 
    end 

    def valid_password?(password) 
    BCrypt::Password.new(self.password_digest).is_password?(password) 
    end 

    def password=(password) 
    @password = password 
    self.password_digest = BCrypt::Password.create(password) 
    end 

    def reset_session_token 
    self.session_token = SecureRandom.urlsafe_base64 
    self.save! 
    self.session_token 
    end 
end 
+1

Bitte aktualisieren Sie Ihre bcrypt-Ruby 3.1.5 wie vorgeschlagen auf codahale/bcrypt-ruby 89 #. – Sravan

Antwort

4

von dem, was ich sehen kann, kann ich nicht verlangen ‚bcrypt‘ sehen in Ihrem Benutzermodell

require 'bcrypt' 
class User < ActiveRecord::Base 
... 
end 
+0

OK, das hat mein Problem behoben. Ich war mir sicher, dass das nicht nötig war. Mein vorheriges Projekt hat es nicht und hat gut funktioniert, aber, es hat so funktioniert, danke! –

+0

Irgendein Wort darüber, ob das eine neue Anforderung ist? Ich bin mir ziemlich sicher, dass ich das vor ein paar Wochen nicht brauchte. –

+1

In der Dokumentation hier heißt es, dass es erfordert https://github.com/codahale/bcrypt-ruby – Shani

0

Es sei denn, Ihre Anwendung rein zu Lernzwecken ist, sollten Sie ernsthaft Verwenden Sie ActiveModel::SecurePassword, das in Schienen eingebaut ist.

Das Authentifizierungsrad neu zu erfinden ist einer der häufigsten Sicherheitsfehler.

Sie möchten auch keine Sitzungstokens in Ihrem Benutzermodell in der Datenbank speichern. Stattdessen sollten Sie Rails verwenden, die im Session-Mechanismus eingebaut sind.

Die Rails-Middleware gibt eine Sitzungskennung in einem Cookie an alle Besucher aus. Der Cookie enthält einfach einen 32 Byte langen MD5-Hash, der mit einem Sitzungsspeicher verknüpft ist (standardmäßig in einem anderen Cookie gespeichert).

Sie können die Sitzung jederzeit durch Aufruf von reset_session ungültig machen.

In der Tat sollten Ihre Modelle in keiner Weise der Sitzung bewusst sein.

See:

+0

Die Aufgabe ist, Ihre eigene Authentifizierung für rein Lernzwecke rollen, ja. Danke, dass Sie mich in den bevorzugten Ansatz einbezogen haben. –

Verwandte Themen