Django身份验证不必要地创建了新用户-auth0 [英] django authentication new user created unnecessarily - auth0

查看:0
本文介绍了Django身份验证不必要地创建了新用户-auth0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

这是auth0后端,现在我已经硬编码为用户名和用户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已在数据库中,从而将其用作从中检索应用数据的用户?

推荐答案

这是因为我没有在settings.py中设置python-Social-auth管道。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',
)

这篇关于Django身份验证不必要地创建了新用户-auth0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆