2017-01-24 5 views
1

Ich versuche, Problem mit Basic-Authentifizierung in Kolben mit HTTPBasicAuth zu lösen.Flask HTTPBasicAuth kein Token in Header

Wenn ich mithilfe von Curl oder Webbrowser zugreifen, funktioniert alles gut. Dies sind Beispiele, die funktionieren:

curl -u [access_token]:unused -i X GET http://127.0.0.1:5000/api/v1/token 

oder

http://[access_token]:[email protected]:5000/api/v1/token 

Aber wenn ich Authorization: Basic [token] oder Authorization: Basic [token]:unused in Header der Anfrage mit mir 500 Fehlern vom Server.

Überprüfen der Zugriffstoken oder E-Mail und Passwort:

@auth.verify_password 
def verify_password(email_or_token, password): 

    user = User.verify_auth_token(email_or_token) 
    if not user: 

     user = User.query.filter_by(email = email_or_token).first() 
     if not user or not user.verify_password(password): 
     return False 
    g.user = user 
    return True 

User-Modell:

class User(db.Model): 

    def generate_auth_token(self, expiration = 600): 
     s = Serializer(app.config['SECRET_KEY'], expires_in = expiration) 
     return s.dumps({ 'id': self.id }) 

    @staticmethod 
    def verify_auth_token(token): 
     s = Serializer(app.config['SECRET_KEY']) 
     try: 
      data = s.loads(token) 
     except SignatureExpired: 
      return None # valid token, but expired 
     except BadSignature: 
      return None # invalid token 
     user = User.query.get(data['id']) 
     return user 

ich fand, als ich Token oder E-Mail und Passwort bin mit im Header als Basic [token/email]:[password/unused], email_or_token und password Eigenschaften sind None.

Error: TypeError: argument of type 'NoneType' is not iterable

enter image description here

Warum treten Fehler bei der Verwendung von Authorization: Basic [token/email]:[password/unused] in Header der Anfrage? Was ist die Lösung dafür?

Antwort

1

Sie müssen Base64-codieren den Berechtigungsnachweis Teil Ihrer Autorisierungsheader. Dies kann mit der Befehlszeile base64 Dienstprogramm getan werden.

echo 'token:unused' | base64 

Aus dem Beispiel here, der Benutzername-Passwort-Kombination von Aladdin:OpenSesame wird:

Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l 

Der Grund, dass Sie müssen darüber keine Sorge mit curl oder den Browser, ist, dass sie durchführen wird die Codierung automatisch für Sie.