Flask-проверка входа в систему, если пользователь аутентифицируется без декоратора


Из документов Flask-Login описано, как пользователь системы может потребовать аутентифицированную пользовательскую модель для доступа к методу, использующему синтаксис декоратора:

from flask_login import login_required    

@app.route("/settings")
@login_required
def settings():
    pass

Теперь это все хорошо и хорошо, но я хочу иметь возможность проверить, зарегистрирован ли пользователь в методе, что-то вроде этого:

@app.route('/main/', methods=['GET', 'POST'])
main_route():
    if request.method == 'GET':
         if user_is_authenticated():    #Do the authentication here
             #load authenticated /main/ html template etc.
             pass
         else:
             #load unauthenticated /main/ html template etc.
             pass
    ...

Причина этого заключается в том, что он факторизирует запросы GET и POST, а не дублирует маршруты для аутентифицированных пользователей и неаутентифицированных пользователей.
Как я могу это сделать? Возможно ли это?

2 24

2 ответа:

Это очень просто в колбе:

from flask_login import current_user

@app.route(...)
def main_route():
    if current_user.is_authenticated:
         return render_template("main_for_user.html")
    else:
         return render_template("main_for_anonymous.html")

Смотритедокументацию по анонимным пользователям .

Вы можете сослаться на пример здесь.

Когда пользователь вошел в систему, установите session['logged_in']=True. В то же время, вы можете использовать Flask-login API для выполнения некоторых конфигураций в случае, если вы хотите использовать его функциональность.
Если вы хотите проверить, вошел ли пользователь вручную, а не с помощью API Flask-login, то проверьте значение session['logged_in'].