Одним из самых важных специальностей успокоительного является безгражданство, это означает, что сервер не будет «помнить» какую-либо информации от клиентов, запросы от клиенты должны были содержать всю необходимую информацию, в том числе полную информацию.
На ваш вопрос не нужно использовать аутентификацию службы Flask-Login для RESTful, и вы не должны использовать куки или сеансы из-за разнообразия клиентов. Конечно, вы можете сделать аутентификацию HTTP, но Flask-HTTPAuth - это то, что вам действительно нужно.
Вот простейший пример Колба-HTTPAuth:
from flask.ext.httpauth import HTTPBasicAuth
auth = HTTPBasicAuth()
@auth.verify_password
def verify_password(username, password):
user = User.query.filter_by(username=username).first()
if not user:
return False
g.current_user = user
# You should accomplish the verify_password function by yourself in the User model.
return user.verify_password(password)
Согласно документу опоки-HTTPAuth:
Функция обратного вызова принимает два аргумента, имя пользователя и пароль и должен возвращать True или False.
Вы должны заметить, что инициализация Колбы-HTTPAuth только в плане, а не всем приложении, поскольку этой аутентификация используется только в вашем restserver плане.
Тогда существует функция так же, как Колба-Логин-х @login_required, который обеспечивается Колба-HTTPAuth:
@app.route('/private')
@auth.login_required
def private_page():
return "Only for authorized people!"
Это «login_required» функция обратного вызова будет вызываться, когда аутентификация успешно. Так как весь маршрут вашего сервера-хранилища должен быть защищен, вы можете использовать обработчик «before_request» для применения защиты для всего проекта. Если предположить, что имя вашего restserver Blueprint является «отдых», и вы сохранили пользовательский объект в «г» так же, как то, что мы делаем перед:
from flask import jsonify
@rest.before_request
@auth.login_required
def before_request():
if not g.current_user:
return jsonify({'error':'Unauthorized.'})
Я думаю, что это будет делать трюк. То, что я написал выше, является просто самым простым примером, и вы можете сделать гораздо лучше во многих отношениях, таких как замена учетных данных пользователя маркером после первого запроса. Я считаю, что вы это выясните.
Если мой ответ будет полезен, это будет моей большой честью, если вы сможете «поддержать» этот ответ, спасибо.
Возможно, но перенаправление на просмотр входа в конечную точку отдыха не имеет смысла. Вы просто вернете 403, если пользователь не был аутентифицирован. – davidism
Да. Это именно то, чего я хочу. Как я могу убедиться, что login_manager.login_view = '/ web/login' будет выполнен только для проекта веб-сервера. – user462455