Auth0 сохранить имя пользователя вместо 'sub' - PullRequest
0 голосов
/ 13 марта 2020

Я завершил реализацию auth0 для моего django и отреагировал на приложение. Но с тех пор как я зарегистрировался с новым пользователем, «sub» сохраняется как имя пользователя вместо настоящего «name». Есть ли способ исправить это?

enter image description here

settings.py

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'django.contrib.auth.backends.RemoteUserBackend',
]

JWT_AUTH = {
    'JWT_PAYLOAD_GET_USERNAME_HANDLER':
        'posts.utils.jwt_get_username_from_payload_handler',
    'JWT_DECODE_HANDLER':
        'posts.utils.jwt_decode_token',
    'JWT_ALGORITHM': 'RS256',
    'JWT_AUDIENCE': '<API_IDENTIFIER>',
    'JWT_ISSUER': 'https://<APP_DOMAIN>/',
    'JWT_AUTH_HEADER_PREFIX': 'Bearer',
}

posts.utils.py

from django.contrib.auth import authenticate
import json
import jwt
import requests


def jwt_get_username_from_payload_handler(payload):
    username = payload.get('sub').replace('|', '.')
    authenticate(remote_user=username)
    return username


def jwt_decode_token(token):
    header = jwt.get_unverified_header(token)
    jwks = requests.get(
        'https://{}/.well-known/jwks.json'.format('<APP_DOMAIN>')).json()
    public_key = None
    for jwk in jwks['keys']:
        if jwk['kid'] == header['kid']:
            public_key = jwt.algorithms.RSAAlgorithm.from_jwk(json.dumps(jwk))

    if public_key is None:
        raise Exception('Public key not found.')

    issuer = 'https://{}/'.format('<APP_DOMAIN>')
    return jwt.decode(token, public_key, audience='<API_IDENTIFIER>', issuer=issuer, algorithms=['RS256'])

Вот некоторые из моих кодов, которые я использовал в учебнике auth0. Я попытался изменить обработчик имени пользователя, но он пока не работал.

...