def openid_callback(request, template='socialregistration/openid.html', extra_context=dict(), account_inactive_template='socialregistration/account_inactive.html'): """ Catches the user when he's redirected back from the provider to our site """ client = OpenID( request, 'http%s://%s%s' % ( _https(), Site.objects.get_current().domain, reverse('openid_callback') ), request.session.get('openid_provider') ) if client.is_valid(): identity = client.result.identity_url if request.user.is_authenticated(): # Handling already logged in users just connecting their accounts try: profile = OpenIDProfile.objects.get(identity=identity) except OpenIDProfile.DoesNotExist: # There can only be one profile with the same identity profile = OpenIDProfile.objects.create(user=request.user, identity=identity) return HttpResponseRedirect(_get_next(request)) user = authenticate(identity=identity) if user is None: request.session['socialregistration_user'] = User() request.session['socialregistration_profile'] = OpenIDProfile( identity=identity ) return HttpResponseRedirect(reverse('socialregistration_setup')) if not user.is_active: return render_to_response( account_inactive_template, extra_context, context_instance=RequestContext(request) ) login(request, user) return HttpResponseRedirect(_get_next(request)) return render_to_response( template, dict(), context_instance=RequestContext(request) )
def openid_redirect(request): """ Redirect the user to the openid provider """ request.session['next'] = _get_next(request) request.session['openid_provider'] = request.GET.get('openid_provider') client = OpenID( request, 'http%s://%s%s' % ( _https(), Site.objects.get_current().domain, reverse('openid_callback') ), request.GET.get('openid_provider') ) try: return client.get_redirect() except DiscoveryFailure: request.session['openid_error'] = True return HttpResponseRedirect(settings.LOGIN_URL)