Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #I wrote this partial pipeline step
- @partial
- def require_phone(backend, request, details, *args, **kwargs):
- request.session['backend'] = backend.name
- user_phone = request.session.get('user', None)
- user = kwargs.get('user', None)
- if not user:
- if not user_phone:
- return redirect(reverse('social-confirm'))
- else:
- try:
- user = User.objects.get(phone=user_phone)
- user.first_name = details['fullname']
- user.save()
- return {
- 'user': user,
- 'username': user.phone,
- }
- except User.DoesNotExist:
- return redirect(reverse('social-confirm'))
- return
- # Then add this to my pipeline
- 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.social_auth.social_user',
- 'santehnik.account.pipeline.require_phone',
- 'social_core.pipeline.social_auth.associate_user',
- 'social_core.pipeline.social_auth.load_extra_data',
- 'social_core.pipeline.user.user_details',
- )
- '''require_phone() function will redirect us to 'social-confirm',
- which will get phone from user, create user with this phone, if user not exists
- and redirect us to account activation with sms code
- '''
- def social_confirm(request):
- backend = request.session['backend']
- if request.method == 'POST':
- form = SocialConfirmationForm(request.POST)
- if form.is_valid():
- phone = form.cleaned_data['phone']
- try:
- user = User.objects.get(phone=phone)
- except User.DoesNotExist:
- user = User(phone=phone, is_active=False)
- hashcode = user.create_hash()
- user.hashcode = hashcode
- send_sms_with_activation(user)
- user.save()
- if user.is_active:
- return redirect(reverse('social-existing-activation', kwargs={'hashcode': hashcode}))
- return redirect(reverse('social-new-activation', kwargs={'hashcode': hashcode}))
- else:
- form = SocialConfirmationForm()
- return render(request, 'account/social_confirm.html', locals())
- def activate_existing_user(request, **kwargs):
- backend = request.session.get('backend')
- hashcode = kwargs.get('hashcode')
- if request.method == 'POST':
- form = SocialActivationForm(request.POST, hashcode=hashcode)
- if form.is_valid():
- activation_code = form.cleaned_data['code']
- hashcode = form.cleaned_data['hashcode']
- if activation_code:
- try:
- user = User.objects.get(activation_code=activation_code, hashcode=hashcode)
- user.activation_code = ''
- user.hashcode = ''
- user.is_active = True
- user.save()
- request.session['user'] = user.phone
- messages.success(request, _('Your account has been successfully activated'))
- return redirect('social:complete', backend=backend)
- except User.DoesNotExist:
- messages.error(request, 'User is not found')
- return redirect(reverse('social-existing-activation', kwargs={'hashcode': hashcode}))
- else:
- form = SocialActivationForm(hashcode=hashcode)
- return render(request, 'account/social_activation.html', locals())
- def activate_new_user(request, **kwargs):
- backend = request.session.get('backend')
- hashcode = kwargs.get('hashcode')
- if request.method == 'POST':
- form = SocialNewUserActivationForm(request.POST, hashcode=hashcode)
- if form.is_valid():
- activation_code = form.cleaned_data['code']
- hashcode = form.cleaned_data['hashcode']
- password = form.cleaned_data['password']
- if activation_code:
- try:
- user = User.objects.get(hashcode=hashcode, activation_code=activation_code, is_active=False)
- user.activation_code = ''
- user.hashcode = ''
- user.is_active = True
- user.set_password(password)
- user.save()
- request.session['user'] = user.phone
- login(request, user, backend='django.contrib.auth.backends.ModelBackend')
- messages.success(request, _('Your account has been successfully activated'))
- return redirect('social:complete', backend=backend)
- except User.DoesNotExist:
- messages.error(request, 'User is not found')
- return redirect(reverse('social-new-activation', kwargs={'hashcode': hashcode}))
- else:
- form = SocialNewUserActivationForm(hashcode=hashcode)
- return render(request, 'account/activate_new_social_user.html', locals())
Add Comment
Please, Sign In to add comment