2014-03-24 14 views
5

Ich versuche, Basic Auth auf meiner Flask-Anwendung mit der Flask-Login-Erweiterung zu implementieren. Nach der Dokumentation habe ich einen Beispiel Request Loader versucht, aber es gibt mir einen 401 Unauthorized Fehler, während der bald zu veraltende Header_loader einwandfrei funktioniert, also mache ich etwas falsch oder gibt es einen Fehler im request_loader.Flask-Login request_loader funktioniert nicht?

Ich benutze das folgende request_loader:

login_manager = LoginManager(app) 

@login_manager.request_loader 
def load_user_from_request(req): 
    print req.headers # just to see what happens 
    user = models.Werknemer.query.first() #this user exists, so it always returns a user 
    return user 

Meine geschützten Ansicht:

@app.route("/test") 
@login_required 
def index(): 
    return 'OK' 

Und mein Anforderungscode:

import requests 
from requests.auth import HTTPBasicAuth 

test_req = requests.get('http://localhost:5000/test', auth=HTTPBasicAuth('test', 'test')) 
print test_req.content 

, wenn ich meine Anfrage Code ausführen es zurückgibt:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<title>401 Unauthorized</title> 
<h1>Unauthorized</h1> 
<p>The server could not verify that you are authorized to access the URL requested. You either supplied the wrong credentials (e.g. a bad password), or your browser doesn't understand how to supply the credentials required.</p> 

Wenn ich den Auth-Teil meiner Anfrage weglasse, wird meine geschützte Ansicht zurückgegeben. Warum akzeptiert flask den Basic-Auth-Header nicht?

Antwort

0

Ich nehme Pluralsight's course on this jetzt und ich habe den gleichen Fehler. Es funktionierte, nachdem ich die Syntax im Setup der Authentifizierung korrigiert habe.

# Configure authentication 
login_manager = LoginManager() 
login_manager.session_protection = 'strong' 
login_manager.login_view = 'login' 
login_manager.init_app(app) 

Ich hatte die letzte Zeile falsch eingegeben und bekam den Fehler 404. Die Linie wurde korrigiert und es funktionierte.