Python bcrypt Paket auf Heroku gibt AttributeError: 'Modul' Objekt hat kein Attribut 'ffi'

Ich habe ein Problem mit bcrypt mit meiner Flasche Anwendung auf Heroku. Wenn ich nach Heroku einstelle und auf die Login-Route gehe, bekomme ich 500 Interner Server-Fehler. Es funktioniert richtig lokal. Wie bekomme ich das Bcrypt-Paket, das an Heroku arbeitet?

ERROR in app: Exception on /login [POST] Traceback (most recent call last): File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1639, in full_dispatch_request rv = self.dispatch_request() File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1625, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "/app/.heroku/python/lib/python2.7/site-packages/flask_restful/__init__.py", line 477, in wrapper resp = resource(*args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/flask/views.py", line 84, in view return self.dispatch_request(*args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/flask_restful/__init__.py", line 587, in dispatch_request resp = meth(*args, **kwargs) File "/app/app.py", line 196, in post elif bcrypt.check_password_hash(user.password, password): File "/app/.heroku/python/lib/python2.7/site-packages/flask_bcrypt.py", line 193, in check_password_hash return safe_str_cmp(bcrypt.hashpw(password, pw_hash), pw_hash) File "/app/.heroku/python/lib/python2.7/site-packages/bcrypt/__init__.py", line 82, in hashpw hashed = _bcrypt.ffi.new("char[]", 128) AttributeError: 'module' object has no attribute 'ffi' 

  • Wie zu speichern und vergleichen Passwort in db mit py-bcrypt
  • Fehler beim Installieren von bcrypt mit Pip auf OS X: kann nicht finden ffi.h (libffi ist installiert)
  • Passwort speichern als gesalzener Hash in Mongodb in der Benutzer-Sammlung mit python - bcrypt
  • Wie kann ich Salz für bcrypt.hashpw setzen?
  • Wenn ich versuche zu installieren Flask-bcrypt es wirft mir Fehler: Befehl 'x86_64-linux-gnu-gcc' fehlgeschlagen mit Exit-Status 1
  • Flasche-bcrypt - ValueError: Ungültiges Salz
  • Sind Mixin-Klasse __init__ Funktionen nicht automatisch aufgerufen?
  • Was ist ein Mixin, und warum sind sie nützlich?
  • 2 Solutions collect form web for “Python bcrypt Paket auf Heroku gibt AttributeError: 'Modul' Objekt hat kein Attribut 'ffi'”

    Ich stieß auf ein ähnliches Problem. Hier ist eine Kopie des letzten Teils meiner Stapelspur:

      self.password = User.hashed_password(password) File "/app/application/models.py", line 16, in hashed_password File "/app/.heroku/python/lib/python3.5/site-packages/flask_bcrypt.py", line 163, in generate_password_hash File "/app/.heroku/python/lib/python3.5/site-packages/bcrypt/__init__.py", line 50, in gensalt output = _bcrypt.ffi.new("unsigned char[]", 30) AttributeError: module 'bcrypt._bcrypt' has no attribute 'ffi' 

    Ich frage mich, ob diese Frage für Heroku besonders ist. Ich habe einige vorhandene Flaschenkesselplatte benutzt. Aber dieses Problem mit Bcrypt ist mir auch in früheren Projekten passiert, als ich ein (anderes) Kesselplatten-Flask-Projekt auf Heroku verwende.

    Mögliche Lösung 1

    Spiel mit verschiedenen Abhängigkeitskombinationen herum. In einem Fall ging das Problem weg, als ich cryptography in meine requirements.txt enthielt. Aber wie Jean Silva in diesem Thread erwähnt hat, ist es möglich, dass Abhängigkeiten in Konflikt stehen könnten. So können Sie mit verschiedenen Kombinationen spielen, bis etwas funktioniert.

    Mögliche Lösung 2

    Wenn Sie Flasche verwenden, versuchen Sie es mit dem werkzeug.security Paket / Modul zu Hash / Check Hashes im Gegensatz zu der Verwendung der bcrypt Paket direkt. Im Beispiel unten in meinen models.py , kommentieren solche Zeilen und das Hinzufügen neuer, löste das Problem für mich.

     # from index import db, bcrypt from index import db from werkzeug.security import generate_password_hash, check_password_hash class User(db.Model): id = db.Column(db.Integer(), primary_key=True) email = db.Column(db.String(255), unique=True) password = db.Column(db.String(255)) def __init__(self, email, password): self.email = email self.active = True self.password = User.hashed_password(password) @staticmethod def hashed_password(password): # return bcrypt.generate_password_hash(password) return generate_password_hash(password) @staticmethod def get_user_with_email_and_password(email, password): user = User.query.filter_by(email=email).first() # if user and bcrypt.check_password_hash(user.password, password): if user and check_password_hash(user.password, password): return user else: return None 

    Ich habe die Lösung gefunden, ich habe die folgenden Pakete verwendet: bcrypt, flask_bcrypt und py-crypt. Also ich deinstalliere die py-bcrypt, wahrscheinlich war dieses Paket im Konflikt mit bcrypt Paket.

     pip uninstall py-bcrypt 
    Python ist die beste Programmiersprache der Welt.