Example #1
0
 def get_facebook_proxy(self, request):
     return facebook.create_facebook_proxy(request,
         request.build_absolute_uri(self.get_facebook_login_url(request)))
Example #2
0
 def get_facebook_proxy(self, request):
     return facebook.create_facebook_proxy(
         request, request.build_absolute_uri(self.get_facebook_login_url()))
Example #3
0
def facebook_login(request, template_name='facebook/login.html',
        connect_template_name='facebook/login.html',
        fail_template_name='facebook/failed.html',
        extra_context=None, form_class=NoPasswordUserCreationForm,
        connect_form_class=ConnectUserForm,
        success_url=settings.LOGIN_REDIRECT_URL):
    """
    Facebook callback view
    """

    fb = facebook.create_facebook_proxy(request,
            request.build_absolute_uri(reverse('facebook-login')))

    if not fb.authorized():
        ctx = extra_context or {}
        ctx.update({
            'message': _('We couldn\'t validate your Facebook credentials.'),
            })
        return render_to_response(fail_template_name, RequestContext(request, ctx))


    if request.user.is_authenticated():
        form_class = connect_form_class
        user = request.user
    else:
        user = None

    if request.method == 'POST':

        form = form_class(data=request.POST)
        if form.is_valid():
            maybe_new_user = form.save()
            user = user or maybe_new_user #;)
            fb.get_or_create_local_profile(user)
            user = authenticate(facebook_uid=fb.uid)
            fbprofile = fb.get_profile()
            if user:
                signals.facebook_connect.send(sender=facebook_login,
                        instance=user, fbprofile=fbprofile, graph=fb.graph)
                login(request, user)
            return redirect(success_url)
    else:

        # try to authenticate previously connected facebook user
        # using facebook User ID
        
        user = authenticate(facebook_uid=fb.uid)
        if user:
            # user authenticated
            signals.facebook_login.send(sender=facebook_login,
                    instance=user, graph=fb.graph)
            login(request, user)
            return redirect(success_url)

        fbprofile = fb.get_profile()
        initials=dict((k, v) for (k, v) in fbprofile.iteritems() if k in ('first_name', 'last_name', 'email'))
        potential_username=fbprofile.get('username')
        
        if not potential_username:
            try:
                potential_username=u'-'.join(fbprofile.get('name').split())
            except AttributeError, e:
                logger.error('Error guessing username from fbprofile: %s' % fbprofile)
                potential_username=u'fb_%s' % fbprofile['id']
        username=unidecode(potential_username.lower().replace('.', '-'))

        sufix=0
        try_username=username
        while True:
            try:
                user=User.objects.get(username=try_username)
            except User.DoesNotExist:
                username=try_username
                break
            else:
                sufix+=1
                try_username=username + '-' + str(sufix)

        initials.update({'username': username})
        form = form_class(initial=initials)