django身份验证不必要的新用户创建-auth0

时间:2019-01-22 09:09:51

标签: django authentication auth0

因此,我正在尝试将auth0与现有的django应用程序和sqlite数据库集成。登录正常,问题是我无法通过请求获取auth0输入的用户名以映射到数据库中已存在的用户模型。

这是auth0后端,现在我已硬编码分别为用户名和user_id返回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)时,它会打印eq306fa23456g204e8c51。当我进入数据库时​​,我看到它确实在auth_user表中创建了一个新用户,即使在同一表中已经有一个eq3和id为21的用户。此外,如果我输入一个随机的用户名,例如foobar,它仍然会创建一个新用户,但不会将无意义的字母数字字符串添加到用户名中,而只是添加foobar。这里发生了什么?如何让django识别出用户名eq3已经存在于数据库中,并以此作为用户来检索应用程序数据的用户?

1 个答案:

答案 0 :(得分:0)

这是由于我没有在settings.py中设置python-social-auth管道,我需要在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',
)