我在我的Django应用程序中使用DRF,DRF-JWT,Allauth和Res-auth以及djangorestframework-jwt-refresh-token .
我有一个自定义JWT注册串行器来收集一些额外的用户信息,并创建和创建一个刷新令牌,用于刷新过期的JWT令牌 . 我们在后端和ios应用程序中工作,没有电子邮件注册问题 . 我现在正尝试使用allauth的sociallogin元素实现JWT,特别是facebook作为提供者 .
我可以通过覆盖DefaultSocialAccountAdapter来为facebook用户创建一个刷新令牌,但是我很难将带有所述刷新令牌的JWT的Json响应返回给移动客户端 .
这会创建刷新令牌:
class CustomSocialAccountAdapter(DefaultSocialAccountAdapter):
def save_user(self, request, sociallogin, form):
user = super(CustomSocialAccountAdapter, self).save_user(request, sociallogin, form)
app = 'users'
user.refresh_tokens.create(app=app)
return user
我可以用这个手动创建JWT:
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
如果我要覆盖适配器或使用pre_social_login信号,我只是难以将它们放在一起 .
任何指针赞赏 .
1 回答
我使用以下内容返回长期存在的刷新令牌以及Facebook登录上的头像URL:
我不知道这是否是正确的方法,但它现在有效 .