аутентификация django новый пользователь создан без необходимости - auth0 - PullRequest
0 голосов
/ 22 января 2019

Поэтому я пытаюсь интегрировать auth0 с моим существующим приложением django и базой данных sqlite. Вход в систему работает, проблема в том, что я не могу получить имена пользователей, введенные auth0 через запрос на сопоставление с моделями пользователей, уже присутствующими в моей базе данных.

Это серверная часть auth0, и сейчас я жестко запрограммирован, чтобы вернуть eq3 и 21 соответственно для имени пользователя и идентификатора пользователя.

def get_user_details(self, response):
    # Obtain JWT and the keys to validate the signature
    id_token = response.get('id_token')
    jwks = request.urlopen('https://' + self.setting('DOMAIN') + '/.well-known/jwks.json')
    issuer = 'https://' + self.setting('DOMAIN') + '/'
    audience = self.setting('KEY')  # CLIENT_ID
    payload = jwt.decode(id_token, jwks.read(), algorithms=['RS256'], audience=audience, issuer=issuer)

    return {'username': 'eq3',
            'user_id': 21}

Однако, когда я захожу в views.py и помещаю print(request.user.username) и print(request.user.id), он печатает eq306fa23456g204e8c и 51. Когда я захожу в свою базу данных, я вижу, что она действительно создала нового пользователя в таблице auth_user, даже если в этой таблице уже есть пользователь с eq3 и идентификатором пользователя 21. Кроме того, если я введу случайное имя пользователя, такое как foobar, оно все равно создаст нового пользователя, но не добавит бессмысленную буквенно-цифровую строку к имени пользователя, просто foobar. Что здесь происходит? Как я могу заставить django распознать, что имя пользователя eq3 уже есть в базе данных, и таким образом использовать его в качестве пользователя, из которого можно получить данные для приложения ??

1 Ответ

0 голосов
/ 22 января 2019

Это произошло из-за того, что я не настроил конвейер python-social-auth в моем файле settings.py. Мне нужно было добавить столбец электронной почты в мою таблицу auth_user и переписать настройки по умолчанию следующим образом:

SOCIAL_AUTH_PIPELINE = (
  'social_core.pipeline.social_auth.social_details',
  'social_core.pipeline.social_auth.social_uid',
  'social_core.pipeline.social_auth.auth_allowed',
  'social_core.pipeline.social_auth.social_user',
  'social_core.pipeline.user.get_username',
  'social_core.pipeline.social_auth.associate_by_email', #this was the important one
  'social_core.pipeline.user.create_user',
  'social_core.pipeline.social_auth.associate_user',
  'social_core.pipeline.social_auth.load_extra_data',
  'social_core.pipeline.user.user_details',
)
...