代码之家  ›  专栏  ›  技术社区  ›  Ludo

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

  •  0
  • Ludo  · 技术社区  · 7 年前

    因此,我试图将Auto0与我现有的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) 它印出来了 eq306fa23456g204e8c 51 . 当我进入我的数据库时,我看到它确实在auth_user表中创建了一个新用户,尽管在同一个表中已经有一个用户具有eq3和用户id 21。此外,如果我输入一个随机用户名,比如 foobar ,它仍然会创建一个新用户,但不会将无意义的字母数字字符串添加到用户名中,只是 美食家 . 这是怎么回事?如何让django识别用户名eq3已经存在于数据库中,并将其用作从中检索应用程序数据的用户??

    1 回复  |  直到 7 年前
        1
  •  0
  •   Ludo    7 年前

    这是因为我没有在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',
    )