Как вы проверяете, вошел ли пользователь в систему с помощью flask-jwt-extended, прежде чем войти в систему?

avatar
Meshack Mbuvi
8 апреля 2018 в 11:44
2385
3
1

Я разрабатываю API, используя flask-restful. Я хочу убедиться, что когда пользователь входит в систему, он не может войти снова, если он сначала не вышел из системы. Я использую flask-jwt-extended и мне интересно, есть ли способ проверить, где пользователь уже вошел в систему, прежде чем пытаться войти в систему.

Источник
M Seltene
8 апреля 2018 в 11:56
0

Файлы cookie — это один из вариантов сохранения сеанса. На стороне сервера, когда пользователь входит в систему, он должен создать уникальный токен для этого пользователя и держать сеанс открытым до тех пор, пока пользователь не выйдет из системы либо из-за отсутствия активности сеанса, либо из-за действий пользователя. У уже вошедшего в систему пользователя должен быть токен, поэтому, если токен равен нулю в файле cookie, пользователь выходит из системы, если есть пользователь, вошедший в систему, он должен вернуть токен. Одним из хороших вариантов является firebase. Это сэкономит вам массу времени и позволит сосредоточиться на других разработчиках. Если вам нужен постоянный вход в систему для одного пользователя за раз, вы можете написать код для проверки isloggedin()

Ответы (3)

avatar
Ivan Bryzzhin
9 января 2020 в 16:21
2

Вы можете попробовать использовать декоратор jwt_Optional, но это приведет к ошибке, если срок действия токена истек или недействителен:

@app.route('/hello')
@jwt_optional
def hello():
    user = get_gwt_identity()

Или просто проверьте, действителен ли токен, и верните пользователя. В случае неверного токена пользователь будет пустым:

from flask_jwt_extended import get_jwt_identity, verify_jwt_in_request_optional

def get_identity_if_logedin():
    try:
        verify_jwt_in_request_optional()
        return get_jwt_identity()
    except Exception:
        pass

@app.route('/hello')
def hello():
    user = get_identity_if_logedin()
    # check if user is loged in
    if user:
        # user var here has jwt_identity
avatar
archienorman
13 ноября 2019 в 15:19
0

В защищенной конечной точке возвращается идентификатор JWT, который обращается к этой конечной точке. Если JWT отсутствует, вместо него возвращается None.

См. Справочник по API:

from flask_jwt_extended import jwt_required, jwt_optional, get_jwt_identity

if get_jwt_identity():
    pass

avatar
vimalloc
8 апреля 2018 в 17:56
0

Одним из вариантов может быть использование декоратора jwt_Optional на базовом маршруте и возвращение перенаправления на страницу входа, если пользователь не вошел в систему: http://flask-jwt-extended.readthedocs.io/en /latest/Optional_endpoints.html

Если серверная часть представляет собой просто API, лучшим вариантом может быть поиск токена доступа во внешнем интерфейсе (в локальном хранилище или где бы он ни был сохранен) и добавление логики того, следует ли показывать страницу входа или не там.