flask_login всегда возвращает 401 неавторизованный - PullRequest
1 голос
/ 09 июля 2020

У меня проблемы с flask_login. Но во время тестирования я понял, что получаю 401 несанкционированную ошибку, когда запрашиваю маршрут login_required. Я убедился, что вошел в систему.

Любая помощь приветствуется. спасибо!

Вот моя функция входа в систему:

@app.route('/login', methods=['POST'])
def login():
    req = request.values
    _id = req['id']
    _password = req['password']

    if _id not in USERS:
        return {'message': 'Invalid credentials'}, 401
    elif not USERS[_id].can_login(_password):
        return {'message': 'Invalid credentials'}, 401
    else:
        USERS[_id].authenticated = True
        login_user(USERS[_id], remember=True)
        return {'message': 'Logged in'}, 200

А вот моя модель пользователя, если нужно

class User:
    def __init__(self, _id, _password, _score=0,
                 authenticated=False):
        self._id = _id
        self._password = _password
        self._score = _score
        self.authenticated = authenticated

    def __repr__(self):
        r = {
            'id': self._id,
            'password': self._password,
            'score': self._score,
        }
        return str(r)

    def can_login(self, _password):
        return self._password == _password

    def is_active(self):
        return True

    def get_id(self):
        return self._id

    def is_authenticated(self):
        return self.authenticated

    def is_anonymous(self):
        return False

Это моя функция user_loader

@login_manager.user_loader
def user_loader(_id):
    return USERS[_id]

И тестировал через модуль запросов

>>> print(requests.post(url+"login", data={"id":"test", "password":"1"}).content)
b'{\n  "message": "Logged in"\n}\n'

>>> print(requests.get(url+"users").content)
b'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\n<title>401 Unauthorized</title>\n<h1>Unauthorized</h1>\n<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>\n'

1 Ответ

1 голос
/ 09 июля 2020

Моя проблема заключалась в том, что я не сохранял ie повара в запросе. Сделав request.Session, я смог заставить его работать.

s = request.Session()
>>> print(s.post(url+"login", data={"id":"test", "password":"1"}).content)
>>> print(requests.get(url+"users").content)
...