def complete(request, provider): """ After first step of public authentication, we must validate the response. If everything is ok, we must do the following: 1. If user is already authenticated: a. Try to login him again (strange variation but we must take it to account). b. Create new PublicID record in database. c. Merge authenticated account with newly created PublicID record. d. Redirect user to 'next' url stored in session. 2. If user is anonymouse: a. Try to log him by identity and redirect to 'next' url. b. Create new PublicID record in database. c. Try to automaticaly fill all extra fields with information returned form server. If successfull, login the user and redirect to 'next' url. d. Redirect user to extra page where he can fill all extra fields by hand. """ # merge data from POST and GET methods data = request.GET.copy() data.update(request.POST) backend = get_backend(provider) response = backend.validate(request, data) if request.user.is_authenticated(): backend.login_user(request) backend.merge_accounts(request) else: backend.login_user(request) if not settings.REGISTRATION_ALLOWED: messages.warning(request, lang.REGISTRATION_DISABLED) return redirect(settings.REGISTRATION_DISABLED_REDIRECT) return backend.complete(request, response)
def begin(request, provider): """ Display authentication form. This is also the first step in registration. The actual login is in social_complete function below. """ # merge data from POST and GET methods data = request.GET.copy() data.update(request.POST) # store url to where user will be redirected # after successfull authentication. request.session['next_url'] = request.GET.get("next") or \ global_settings.LOGIN_REDIRECT_URL # start the authentication process backend = get_backend(provider) return backend.begin(request, data)