Lorsque j'essaie d'accéder à un itinéraire avec le décorateur @auth.login_required
, une fenêtre me demande d'entrer mon nom d'utilisateur et mon mot de passe. Après avoir saisi cette information, les paramètres username_or_token
et password
pour la fonction verify_password
sont ''
. Pourquoi les données sont-elles vides?Flask-HTTPAuth verify_password Fonction ne recevant pas le nom d'utilisateur ou le mot de passe
@auth.verify_password
def verify_password(username_or_token, password):
# first try to authenticate by token
user = USER.verify_auth_token(username_or_token)
logger.debug("user = %r", user)
logger.debug("Entered USEREMAIL = %r" , username_or_token)
logger.debug("entered password = %r" , password)
if not user:
# try to authenticate with username/password
user = session.query(USER).filter_by(USEREMAIL=username_or_token).first()
if not user or not user.verify_password(password):
return False
g.user = user
return True
MISE À JOUR
J'ai simplifié le code à ceci:
@auth.verify_password
def verify_password(username, password):
logger.debug("username = %s" % username)
logger.debug("password = %s" % password)
return true
@app.route('/api/token')
@auth.login_required
def get_auth_token():
return "Hello, %s!" % auth.username()
Je teste cette fonction en utilisant Advanced Rest Client
.
http://localhost:8081/myapp/api/token
J'ai aussi attaché un en-tête Authorization
.
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36
Authorization: Basic YXNkOmFzZA==
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh-TW;q=0.4
Il en résulte la sortie:
Hello, !
fichier journal:
username =
password =
Je suis également jamais invité à entrer dans mon security credentials
plus.
Une autre chose étrange est que même si je change le retour à false
dans verify_password
, je reçois toujours la même sortie: Hello, !
Il serait utile de fournir un exemple complet reproduisant le problème. Le nom d'utilisateur et le mot de passe sont définis comme des chaînes vides uniquement lorsque le client n'envoie pas l'en-tête 'Authorization', ce qui peut être un problème côté client. – Miguel