我想在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')
})