def extra(request, provider): """ Handle registration of new user with extra data for profile """ identity = request.session.get('identity', None) if not identity: raise Http404 if request.method == "POST": form = str_to_class(netauth_settings.EXTRA_FORM)(request.POST) if form.is_valid(): user = form.save(request, identity, provider) del request.session['identity'] if not netauth_settings.ACTIVATION_REQUIRED: user = auth.authenticate(identity=identity, provider=provider) if user: auth.login(request, user) return redirect(request.session.pop('next_url', netauth_settings.LOGIN_REDIRECT_URL)) else: messages.warning(request, lang.ACTIVATION_REQUIRED_TEXT) return redirect(netauth_settings.ACTIVATION_REDIRECT_URL) else: initial = request.session['extra'] form = str_to_class(netauth_settings.EXTRA_FORM)(initial=initial) return render_to_response('netauth/extra.html', {'form': form }, context_instance=RequestContext(request))
def extra(request, provider): """ Handle registration of new user with extra data for profile """ try: identity = request.session['identity'] except KeyError: raise Http404 if request.method == "POST": form = str_to_class(settings.EXTRA_FORM)(request.POST) if form.is_valid(): user = form.save(request, identity, provider) del request.session['identity'] if not settings.ACTIVATION_REQUIRED: user = auth.authenticate(identity=identity, provider=provider) if user: auth.login(request, user) next_url = request.session['next_url'] del request.session['next_url'] return redirect(next_url) else: messages.warning(request, lang.ACTIVATION_REQUIRED_TEXT) return redirect(settings.ACTIVATION_REDIRECT_URL) else: initial = request.session['extra'] form = str_to_class(settings.EXTRA_FORM)(initial=initial) return render_to_response('netauth/extra.html', {'form': form}, context_instance=RequestContext(request))
def fill_extra_fields(self, request, data): """ Try to fetch extra data from provider, if this data is enough to validate settings.EXTRA_FORM then call save method of form class and login the user. The extra parameter can be some complex object this is why we use method function 'extra_data' to extract data from this object. Also we need to create a dictionary with remapped keys from profile mapping settings. """ form = str_to_class(settings.EXTRA_FORM)(data) if form.is_valid(): form.save(request, self.identity, self.provider) self.login_user(request) else: return data