django-rest-social-auth部分管道如何使用?

时间:2018-02-09 15:04:15

标签: django django-rest-framework pipeline django-socialauth

我想在django-rest-social-auth中使用部分管道,并在create_user管道之前要求用户发送电子邮件,根据用户选择更改电子邮件,然后恢复到已停止的管道。

我使用/ api / login / social / jwt /进行登录/注册以及获取jwt令牌。 我已经创建了部分管道功能,它重定向到更改电子邮件功能,但在恢复到管道(当我转到/完成/)时,它重定向到SOCIAL_AUTH_LOGIN_REDIRECT_URL,我无法恢复到停止管道。但我需要继续管道并获取已创建用户的jwt令牌。

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.debug.debug',
'social_core.pipeline.social_auth.social_user',
'social_core.pipeline.user.get_username',

'myApp.social_pipeline.test_partial',

'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', 
'social_core.pipeline.debug.debug',
)


@partial
def test_partial(strategy, details, user=None, is_new=False, *args, **kwargs):
    if is_new and 'email_set' in kwargs['request'].keys() :
        return
    else:
        current_partial = kwargs.get('current_partial')
        return strategy.redirect(
            '/require_email?partial_token={0}'.format(current_partial.token)
        )

我的require_email函数

@api_view(["GET","POST"])
def require_email(request):
    strategy = load_strategy()
    partial_token = request.GET.get('partial_token')
    partial = strategy.partial_load(partial_token)
    if request.method == 'POST':
        partial.backend.strategy.session['email'] = request.POST.get('email')
        partial.backend.strategy.session['email_set'] = True
        return redirect('social:complete', backend=partial.backend)
    else:

        return Response({
            'email_required': True,
            'current_email': strategy.session_get('email'),
            'partial_backend_name': partial.backend,
            'partial_token': partial_token,
            'uid': partial.kwargs.get('uid')
        })

0 个答案:

没有答案