def setup(request, template='socialregistration/setup.html', form_class=UserForm, extra_context=dict()): """ Setup view to create a username & set email address after authentication """ try: social_user = request.session['socialregistration_user'] social_profile = request.session['socialregistration_profile'] except KeyError: return render_to_response( template, dict(error=True), context_instance=RequestContext(request)) if not GENERATE_USERNAME: # User can pick own username if not request.method == "POST": form = form_class(social_user, social_profile) else: form = form_class(social_user, social_profile, request.POST) if form.is_valid(): form.save(request=request) user = form.profile.authenticate() login(request, user) del request.session['socialregistration_user'] del request.session['socialregistration_profile'] return HttpResponseRedirect(_get_next(request)) extra_context.update(dict(form=form)) return render_to_response(template, extra_context, context_instance=RequestContext(request)) else: # Generate user and profile social_user.username = generate_unique_username() social_user.save() social_profile.user = social_user social_profile.save() # Authenticate and login user = social_profile.authenticate() login(request, user) # Clear & Redirect del request.session['socialregistration_user'] del request.session['socialregistration_profile'] return HttpResponseRedirect(_get_next(request))
def facebook_setup(request, template='socialregistration/facebook_setup.html', form_class=FacebookUserForm, extra_context=dict()): """ Setup view to create a username & set email address after authentication Clone of setup, special to do facebook stuff TODO: need to handle this scenario : - user logged in with facebook, but the email already exists - somewhat handled correctly right now, although not very convenient """ try: social_user = request.session['socialregistration_user'] social_profile = request.session['socialregistration_profile'] except KeyError: return render_to_response( template, dict(error=True), context_instance=RequestContext(request)) if not GENERATE_USERNAME or (not social_user.email): # Should go here so user can pick their email if not request.method == "POST": form = form_class(social_user, social_profile) else: social_user.username = generate_unique_username() form = form_class(social_user, social_profile, request.POST) if form.is_valid(): form.save(request=request) user = form.profile.authenticate() login(request, user) signup_code = form.cleaned_data.get("signup_code", None) if type(signup_code) == type(SignupCode()): signup_code.use(user) del request.session['socialregistration_user'] del request.session['socialregistration_profile'] return HttpResponseRedirect(_get_next(request)) extra_context.update(dict(form=form)) extra_context['user']=social_user extra_context['original_email']=request.session['socialregistration_email'] return render_to_response(template, extra_context, context_instance=RequestContext(request)) else: # Generate user and profile social_user.username = generate_unique_username() social_user.save() social_profile.user = social_user social_profile.save() socialregistrationuser_created.send( sender=None, user=social_user, profile=social_profile, request=request) # Authenticate and login user = social_profile.authenticate() login(request, user) # Clear & Redirect del request.session['socialregistration_user'] del request.session['socialregistration_profile'] del request.session['socialregistration_email'] return HttpResponseRedirect(_get_next(request))