python - Flask test_client() doesn't have request.authorization with pytest python - Flask test_client() doesn't have request.authorization with pytest flask flask

python - Flask test_client() doesn't have request.authorization with pytest


The credentials for HTTP Basic authentication must have a username and a password separated by a colon. If you're still using python 2, try this:

def test_index(test_client):    credentials = b64encode(b"test_user:test_password")    res = test_client.get("/", headers={"Authorization": "Basic {}".format(credentials)})    assert res.status_code == 200

Python 3 is a little stricter about data sanity, so you have to make sure that the bytes are properly decoded before sending them to the server:

def test_index(test_client):    credentials = b64encode(b"test_user:test_password").decode('utf-8')    res = test_client.get("/", headers={"Authorization": f"Basic {credentials}"})    assert res.status_code == 200


I found this solution. Maybe it can help someone:

from requests.auth import _basic_auth_strheaders = {   'Authorization': _basic_auth_str(username, password),}

You just have to use the library 'requests'


from requests.auth import _basic_auth_strheaders = {   'Authorization': _basic_auth_str(username, password)}

This works for me on both python 3.6 and 2.7 whereas the following only works for me on 2.7:

res = test_client.get("/", headers={"Authorization": "Basic {user}".format(user=b64encode(b"test_user:test_password"))})