def save(self, access_token=None, fb_profile=None): import ipdb;ipdb.set_trace() # para gerar um código aleatório que será temporariamente o username dos usuários import md5 m = md5.new() if access_token and fb_profile: m.update(fb_profile['email']) m.update(fb_profile['id']) username = m.hexdigest()[-30:] user = User.objects.create_user(username, fb_profile['email']) user.set_password(self.cleaned_data.get('senha')) user.first_name = self.cleaned_data.get('nome') user.save() # Create the FacebookProfile fb_user = FacebookProfile(user=user, facebook_id=fb_profile['id'], access_token=access_token) fb_user.save() else: email = self.cleaned_data.get('email') m.update(email) username = m.hexdigest()[-30:] user = User.objects.create_user(username, email) user.set_password(self.cleaned_data.get('senha')) user.first_name = self.cleaned_data['nome'] user.save() perfil = Usuario() perfil.user = user #perfil.areas = self.cleaned_data.get('areas', '') perfil.aceita_email = int( self.cleaned_data.get('autorizacao_email', 1) ) perfil.save() return user
def connect_facebook(self, token, request): try: if request.user.facebook_profile: return None except: pass args = { "client_id": settings.FACEBOOK_APP_ID, "client_secret": settings.FACEBOOK_APP_SECRET, "redirect_uri": request.build_absolute_uri("/facebook/connect_callback"), "code": token, } # Get a legit access token target = urllib.urlopen("https://graph.facebook.com/oauth/access_token?" + urllib.urlencode(args)).read() response = cgi.parse_qs(target) access_token = response["access_token"][-1] # Read the user's profile information fb_profile = urllib.urlopen("https://graph.facebook.com/me?access_token=%s" % access_token) fb_profile = json.load(fb_profile) try: # Try and find existing user fb_user = FacebookProfile.objects.get(facebook_id=fb_profile["id"]) if fb_user: return False except FacebookProfile.DoesNotExist: try: # Create the FacebookProfile fb_user = FacebookProfile(user=request.user, facebook_id=fb_profile["id"], access_token=access_token) fb_user.save() return True except: return None
def authenticate(self, token=None, request=None): """ Reads in a Facebook code and asks Facebook if it's valid and what user it points to. """ args = { 'client_id': settings.FACEBOOK_APP_ID, 'client_secret': settings.FACEBOOK_APP_SECRET, 'redirect_uri': request.build_absolute_uri('/facebook/authentication_callback'), 'code': token, } # Get a legit access token target = urllib.urlopen('https://graph.facebook.com/oauth/access_token?' + urllib.urlencode(args)).read() response = cgi.parse_qs(target) access_token = response['access_token'][-1] # Read the user's profile information fb_profile = urllib.urlopen('https://graph.facebook.com/me?access_token=%s' % access_token) fb_profile = json.load(fb_profile) try: # Try and find existing user fb_user = FacebookProfile.objects.get(facebook_id=fb_profile['id']) user = fb_user.user # Update access_token fb_user.access_token = access_token fb_user.save() except FacebookProfile.DoesNotExist: # No existing user # Not all users have usernames username = fb_profile.get('username', fb_profile['email'].split('@')[0]) if getattr(settings, 'FACEBOOK_FORCE_SIGNUP', False): # No existing user, use anonymous user = AnonymousUser() user.username = username user.first_name = fb_profile['first_name'] user.last_name = fb_profile['last_name'] fb_user = FacebookProfile( facebook_id=fb_profile['id'], access_token=access_token ) user.facebookprofile = fb_user else: try: user = User.objects.get(email=fb_profile['email']) except DoesNotExist: # No existing user, create one try: user = User.objects.create_user(username, fb_profile['email']) except IntegrityError: # Username already exists, make it unique user = User.objects.create_user(username + fb_profile['id'], fb_profile['email']) user.first_name = fb_profile['first_name'] user.last_name = fb_profile['last_name'] user.save() # Create the FacebookProfile fb_user = FacebookProfile(user=user, facebook_id=fb_profile['id'], access_token=access_token) fb_user.save() return user