我应该如何继续Python社交身份验证部分管道

我应该如何继续Python社交身份验证部分管道,python,python-social-auth,Python,Python Social Auth,我正在使用的应用程序具有Python Social Auth/complete/端点的覆盖端点 在我们的url.py中: urlspatterns = [ ... # Override of social_auth url(r'^api/v1/auth/oauth/complete/(?P<backend>[^/]+)/$', social_auth_complete, name='social_complete'),

我正在使用的应用程序具有Python Social Auth
/complete/
端点的覆盖端点

在我们的
url.py
中:

urlspatterns = [
    ...
    # Override of social_auth
    url(r'^api/v1/auth/oauth/complete/(?P<backend>[^/]+)/$', 
        social_auth_complete,
        name='social_complete'),
    ...
]
from social_django.views import complete


def social_auth_complete(request, backend, *args, **kwargs):
    """Overwritten social_auth_complete."""
    # some custom logic getting variables from session (Unrelated).

    response = complete(request, backend, *args, **kwargs)

    # Some custom logic adding args to the redirect (Unrelated).
我们正试图实施一项新的战略。第一次调用端点时,一切都按预期工作

@partial
def required_info(strategy, details, user=None, is_new=False, *args, **kwargs):
    """Verify the user has all the required information before proceeding."""
    if not is_new:
        return

   for field in settings.SOCIAL_USER_REQUIRED_DATA:
        if not details.get(field):
            data = strategy.request_data().get(field)
            if not data:
                current_partial = kwargs.get('current_partial')
                social_provider = kwargs.get('backend')
                return strategy.redirect(f'.../?partial_token={partial_token}&provider={social_provider}'
            else:
                details[field] = data
这会将用户重定向到前端,用户在其中填写一个表单,该表单调用对原始API
API/v1/auth/oauth/complete/(?p[^/]+)/
的POST请求,数据中包含以下内容: { “必填字段x”:“数据”, ... “部分_标记”:“, }

关键问题 有两件事出错了;当我将pdb输入到
所需的\u信息中时
策略中没有任何数据。请求\u数据()
kwargs['request']中仍然有数据。body
我可以将数据取出

然而 但我担心,第二次,我们永远不会从社会核心进入这一领域:

我知道这是真的,因为当我询问数据库时,原始部分对象仍然存在,就好像从未调用过
backend.strategy.clean_Partial_管道(Partial.token)

最后问题
为什么
social\u django.views.complete
没有按预期处理POST请求,并且在所有示例应用程序中都是如此。我们的覆盖有问题吗?我是否应该创建一个单独的端点来处理POST请求,如果是这样,如何模拟
@psa
中发生的一切,以便我可以调用
后端。是否继续执行管道(部分)

我认为这里只有一个问题,这就是Django策略没有查看
request.body
当加载请求数据时,您可以看到负责的方法。在那里,您可以看到它查找的是
request.GET
和/或
request.POST
,而不是body

通过定义从内置策略扩展而来的自定义策略,并覆盖
request\u data
方法来查找
request.body
中的值,您可以轻松克服这一问题。然后定义
SOCIAL\u AUTH\u策略
指向您的类。

此工作的所有示例都可以显示表单提交,但我正在执行
application/json
提交。
partial = partial_pipeline_data(backend, user, *args, **kwargs)
if partial:
    user = backend.continue_pipeline(partial)
    # clean partial data after usage
    backend.strategy.clean_partial_pipeline(partial.token)
else:
    user = backend.complete(user=user, *args, **kwargs)