Skip to content

Commit

Permalink
Refactor login without username
Browse files Browse the repository at this point in the history
  • Loading branch information
pinda committed Dec 10, 2009
1 parent e2cb3b1 commit cd8e433
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 41 deletions.
4 changes: 2 additions & 2 deletions socialregistration/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class FacebookProfile(models.Model):
user = models.ForeignKey(User)
site = models.ForeignKey(Site, default=Site.objects.get_current)
uid = models.CharField(max_length=255, blank=False, null=False)
name = models.CharField(max_length=255)
username = models.CharField(max_length=255)

def __unicode__(self):
return '%s: %s' % (self.user, self.uid)
Expand All @@ -28,7 +28,7 @@ class TwitterProfile(models.Model):
user = models.ForeignKey(User)
site = models.ForeignKey(Site, default=Site.objects.get_current)
twitter_id = models.PositiveIntegerField()
name = models.CharField(max_length=255)
username = models.CharField(max_length=255)

def __unicode__(self):
return '%s: %s' % (self.user, self.twitter_id)
Expand Down
2 changes: 2 additions & 0 deletions socialregistration/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from django.utils import simplejson

from django.contrib.sites.models import Site
from django.contrib.auth.models import User

from socialregistration.models import OpenIDStore as OpenIDStoreModel, OpenIDNonce

Expand Down Expand Up @@ -299,3 +300,4 @@ class OAuthFriendFeed(OAuth):
def get_user_info(self):
user = simplejson.loads(self.query(self.url))
return user

92 changes: 53 additions & 39 deletions socialregistration/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
@author: alen
"""
import uuid
from oauth import oauth

from django.conf import settings
Expand Down Expand Up @@ -45,32 +46,51 @@ def setup(request, template='socialregistration/setup.html',
"""
Setup view to create a username & set email address after authentication
"""
if not request.method == "POST":
form = form_class(
request.session['socialregistration_user'],
request.session['socialregistration_profile'],
)
else:
form = form_class(
request.session['socialregistration_user'],
request.session['socialregistration_profile'],
request.POST
)
if form.is_valid():
form.save()
user = form.profile.authenticate()
login(request, user)
del request.session['socialregistration_user']
del request.session['socialregistration_profile']
return HttpResponseRedirect(_get_next(request))
if not getattr(settings, 'AUTO_GENERATE_USERNAME', False):
# User can pick own username
if not request.method == "POST":
form = form_class(
request.session['socialregistration_user'],
request.session['socialregistration_profile'],
)
else:
form = form_class(
request.session['socialregistration_user'],
request.session['socialregistration_profile'],
request.POST
)
if form.is_valid():
form.save()
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))
extra_context.update(dict(form=form))

return render_to_response(
template,
extra_context,
context_instance=RequestContext(request)
)
return render_to_response(
template,
extra_context,
context_instance=RequestContext(request)
)
else:
# Generate user and profile
user = request.session['socialregistration_user']
user.username = str(uuid.uuid4())
user.save()

profile = request.session['socialregistration_profile']
profile.user = user
profile.save()

# Authenticate and login
user = profile.authenticate()
login(request, user)

# Redirect
return HttpResponseRedirect(getattr(settings, 'LOGIN_REDIRECT_URL', _get_next(request)))


def facebook_login(request, template='socialregistration/facebook.html',
extra_context=dict()):
Expand All @@ -88,25 +108,19 @@ def facebook_login(request, template='socialregistration/facebook.html',
user = authenticate(uid=request.facebook.uid)

if user is None:
gen_name = md5_constructor(request.facebook.uid + 'social').hexdigest()[:6]

# Create user to log into django
user = User.objects.create(username=gen_name)

# Create new facebook profile
fb_profile = request.facebook.users.getInfo([request.facebook.uid], ['first_name'])[0]['first_name']
profile = FacebookProfile.objects.create(uid=request.facebook.uid,
user=user,
name=fb_profile,)
request.session['socialregistration_user'] = User()
fb_username = request.facebook.users.getInfo([request.facebook.uid])[0]['name']
request.session['socialregistration_profile'] = FacebookProfile(
uid=request.facebook.uid,
username=fb_username
)
request.session['next'] = _get_next(request)

user = profile.authenticate()
login(request, user)
return HttpResponseRedirect(reverse('socialregistration_setup'))

return HttpResponseRedirect(getattr(settings, 'LOGIN_REDIRECT_URL', '/'))

login(request, user)

return HttpResponseRedirect(getattr(settings, 'LOGIN_REDIRECT_URL', '/'))
return HttpResponseRedirect(getattr(settings, 'LOGIN_REDIRECT_URL', _get_next(request)))

def facebook_connect(request, template='socialregistration/facebook.html',
extra_context=dict()):
Expand Down

0 comments on commit cd8e433

Please sign in to comment.