Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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