2016-03-29 5 views
1

У меня есть флеш-приложение, и оно имеет несколько чертежей (сервер restserver, web-сервер).Differnet вид входа для разных чертежей фляжек

Большинство конечных точек как на веб-сервере, так и на сервере restserver требуют входа пользователя в систему. Я использую расширение для флажков, которое обеспечивает декодер @login_required.

Можно ли иметь различную login_view для различных чертежей

# for web blueprint 
login_mananger.login_view = '/web/login' 

.. so on 
+0

Возможно, но перенаправление на просмотр входа в конечную точку отдыха не имеет смысла. Вы просто вернете 403, если пользователь не был аутентифицирован. – davidism

+0

Да. Это именно то, чего я хочу. Как я могу убедиться, что login_manager.login_view = '/ web/login' будет выполнен только для проекта веб-сервера. – user462455

ответ

0

Одним из самых важных специальностей успокоительного является безгражданство, это означает, что сервер не будет «помнить» какую-либо информации от клиентов, запросы от клиенты должны были содержать всю необходимую информацию, в том числе полную информацию.

На ваш вопрос не нужно использовать аутентификацию службы 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.'}) 

Я думаю, что это будет делать трюк. То, что я написал выше, является просто самым простым примером, и вы можете сделать гораздо лучше во многих отношениях, таких как замена учетных данных пользователя маркером после первого запроса. Я считаю, что вы это выясните.

Если мой ответ будет полезен, это будет моей большой честью, если вы сможете «поддержать» этот ответ, спасибо.