如何使用来自社交身份验证的JWT来获取django.contrib.models.user的相应用户

问题描述 投票:0回答:1

也许我缺少有关JWT理论和概念的一些基本知识,但我想理解以下内容时却把头tear了。

现在,我具有由REST framework JWT Auth驱动的登录和注册。流程是这样的:

  1. 我创建一个django.contrib.auth.models.user实例
  2. 调用REST框架JWT Auth端点以基于用户名和psw获取令牌

在我的settings.py中,我有

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ), ...
}

[此外,我还有MyModel,它具有一个引用了User的外键,该外键存储了一些用户数据(例如,她的购物清单)。因此,我使用JWT令牌来获取用户购物清单。

现在,我需要为用户添加社交身份验证功能。在this post之后,我从FB获得了令牌。但是问题在于,我不理解如何将该令牌与django.contrib.auth.models.user实例相关联。更具体地说,

  1. 我实际上如何填写User实例的first_name,last_name,email等字段?我不明白这个信息应该以某种方式包含在JWT的有效负载部分中吗?
  2. [对视图进行身份验证以获取用户购物清单时,我应该如何告诉Django我包含在标头中的令牌实际上源自FB,而不是REST框架JWT Auth?

更新。

例如,如果是FB,我应该正确理解,我应该向FB发送请求以获取令牌以及用户的电子邮件,姓名和照片,如果成功,我应该回到问题开头描述的过程(创建我的“本机” django.contrib.auth.user实例,获取Django JWT令牌),而根本不考虑FB令牌吗?但这意味着我的用户模型中的password字段应变为可空。

django-rest-framework jwt single-page-application django-authentication django-socialauth
1个回答
0
投票

您最多是正确的。

这些是要执行的步骤。

  1. 将令牌传递到您的django rest服务器,服务器将验证令牌并返回解码后的令牌。请查看此this link
  2. 成功验证后,您应该按ID创建用户或按ID获取用户。所有必需的信息将作为上述链接的响应。您只需要将键映射到Django模型列即可。
  3. 在创建用户期间,您应该为此用户设置不可用的密码,而不是null。请参阅django用户管理器到set unusable password
  4. 现在您从系统中获得了所需的用户。您可以轻松地从系统中为该用户生成JWT令牌,然后将自己的系统生成的令牌返回给您的用户。
  5. [下一个后续API调用,您的rest_framework_jwt.authentication.JSONWebTokenAuthentication将验证,获取用户并将该用户附加到request

您可以尝试使用jwt令牌here。该令牌可以解码为json负载,您可以通过键和值访问该json。

© www.soinside.com 2019 - 2024. All rights reserved.