Как сбросить токен JWT в Django после смены пароля пользователем? - PullRequest
0 голосов
/ 28 января 2020

Моя проблема в том, что я хочу обновить sh или истечь токен JWT, когда кто-то сбрасывает его пароль. Мой проект находится в Django rest framework, поэтому все, что мне нужно, это пример того, как это произойдет Мне нужно сделать все остальные токены недействительными

с наилучшими пожеланиями.

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Вам необходимо переопределить процедуру генерации токена по умолчанию.

def jwt_create_payload(user):
    """
    Create JWT claims token.

    To be more standards-compliant please refer to the official JWT standards
    specification: https://tools.ietf.org/html/rfc7519#section-4.1
    """

    issued_at_time = datetime.utcnow()
    expiration_time = issued_at_time + api_settings.JWT_EXPIRATION_DELTA

    payload = {
        'user_id': user.pk,
        'username': '%s-%s' % (user.username + user.password),
        'iat': unix_epoch(issued_at_time),
        'exp': expiration_time
    }

    # It's common practice to have user object attached to profile objects.
    # If you have some other implementation feel free to create your own
    # `jwt_create_payload` method with custom payload.
    if hasattr(user, 'profile'):
        payload['user_profile_id'] = user.profile.pk if user.profile else None,

    # Include original issued at time for a brand new token
    # to allow token refresh
    if api_settings.JWT_ALLOW_REFRESH:
        payload['orig_iat'] = unix_epoch(issued_at_time)

    if api_settings.JWT_AUDIENCE is not None:
        payload['aud'] = api_settings.JWT_AUDIENCE

    if api_settings.JWT_ISSUER is not None:
        payload['iss'] = api_settings.JWT_ISSUER

    return payload

Обновить параметры JWT_PAYLOAD_HANDLER в ваших настройках в соответствии с новой функцией jwt_create_payload. Когда вы измените свой пароль, ваш токен станет недействительным.

0 голосов
/ 28 января 2020

По умолчанию, если вы не обновляете аутентификацию сеанса, пользователь выходит из системы. Если вы хотите обновить аутентификацию сессии, введите код

from django.contrib.auth import update_session_auth_hash

#after you change password for User- user
update_session_auth_hash(request, user)
...