def authenticate(self, uid=None, access_token=None):
        try:
            graph = facebook.GraphAPI(access_token)
            profile = graph.get_object("me")
        except facebook.GraphAPIError:
            return None

        try:
            facebook_user = FacebookUser.objects.get(id=uid)
            facebook_user.access_token = access_token
            facebook_user.save_from_facebook(profile)
            user = facebook_user.user
        except ObjectDoesNotExist:
            facebook_user = FacebookUser(id=uid,
                                         access_token=access_token)
            user, c = User.objects.get_or_create(
                                username=slugify(profile["name"]),
                                email=profile["email"],
                                password=hashlib.md5(uid).hexdigest())
            user.first_name = profile['first_name']
            user.last_name = profile['last_name']
            user.save()
            facebook_user.user = user
            facebook_user.save_from_facebook(profile)

        return user
def connect(request, redirect_field_name=REDIRECT_FIELD_NAME,
            application=None):
    fb_app = get_app_dict(application)
    cookie = facebook.get_user_from_cookie(request.COOKIES, 
                                           fb_app['ID'], 
                                           fb_app['SECRET'])
    redirect_to = request.REQUEST.get(redirect_field_name, reverse('account'))
    
    if request.user.is_authenticated() and cookie:
        try:
            graph = facebook.GraphAPI(cookie["access_token"])
            profile = graph.get_object("me")
        except facebook.GraphAPIError as e:
            return render_to_response(
                        'registration/facebook/graph_error.html', {'error': e},
                        context_instance=RequestContext(request))
        
        # if the user has already a facebook connection, abort and show
        # error message
        if hasattr(request.user, 'facebookuser'):
            connected_profile = graph.get_object("%s" % request.user.facebookuser.id)
            ctx = {'fb_name' : connected_profile['name'],
                   'fb_link' : connected_profile['link'],
                   'username' : request.user.username}
            return render_to_response(
                        'registration/facebook/already_connected.html', ctx,
                        context_instance=RequestContext(request))
        try:
            # if that facebook user already exists, abort and show error message
            fb_user = FacebookUser.objects.get(id=cookie['uid'])
            ctx = {'fb_name' : profile["name"],
                   'user' : fb_user.user}
            return render_to_response(
                        'registration/facebook/user_exists.html', ctx,
                        context_instance=RequestContext(request))
        except FacebookUser.DoesNotExist:
            fb_user = FacebookUser(id=cookie['uid'], 
                                   user=request.user,
                                   profile_url=profile["link"],
                                   access_token=cookie["access_token"])
            fb_user.save()
            return HttpResponseRedirect(redirect_to)
    
    elif request.user.is_authenticated():
        ctx = {'username' : request.user.username}
        # if no cookie is present, the user did not authorize the application
        # in facebook. show the facebook connect button
        return render_to_response('registration/facebook/connect.html', ctx,
                                  context_instance=RequestContext(request))
    else:
        # there is no facebook graph cookie and the user is not logged in
        # -> redirect to login page
        return HttpResponseRedirect(reverse('auth_login'))
    def authenticate(self, graph=None):
        if not graph:
            raise AttributeError, 'Authentication Backend needs a valid graph.'
   
        # check if the access token is valid:
        try:
            me = graph.request('me')
        except facebook.GraphAPIError as e:
            logger.debug('Could not authenticate User: %s ' % e)
            return None
        
        try:
            facebook_user = FacebookUser.objects.get(id=int(me['id']))
        except FacebookUser.DoesNotExist:
            facebook_user = FacebookUser(id=int(me['id']))
            facebook_user.get_from_facebook(graph=graph, save=True)
        else:
            try:
                if isinstance(facebook_user.user, User) and facebook_user.user.is_authenticated():
                    return facebook_user.user
            except User.DoesNotExist:
                pass
        #we use the Facebook id as username because 'me.name' is not unique enough.
        user = get_or_create_user(me['id'], {
                'email': me.get('email', u''),
                'first_name': me.get('first_name', u''),
                'last_name': me.get('last_name', u''),
                'password': UNUSABLE_PASSWORD,
                'date_joined': datetime.now()
                } )
        facebook_user.user = user
        facebook_user.save()

        return user
def reset_password(token):
    if current_user.is_authenticated:
        return redirect(url_for('index'))
    user = User.verify_reset_password_token(token)
    if not user:
        return redirect(url_for('index'))
    form = ResetPasswordForm()
    if form.validate_on_submit():
        user.set_password(form.password.data)
        db.session.commit()
        flash('Your password has been reset.')
        return redirect(url_for('login'))
    return render_template('reset_password.html', form=form)
def connect(request, redirect_field_name=REDIRECT_FIELD_NAME, app_name=None):
    """ Connects the Facebook Account to the current logged-in user. """
    fb_app = get_app_dict(app_name)
    graph = get_graph(request, app_name=app_name)
    redirect_to = request.REQUEST.get(redirect_field_name,
                                      fb_app['REDIRECT-URL'])

    if request.user.is_authenticated():
        try:
            me = graph.get_object("me")
        except facebook.GraphAPIError as e:
            return redirect('fb_login')

        # if the user has already a facebook connection, abort and show
        # error message
        if hasattr(request.user, 'user'):
            logger.debug('The logged in user is already connected.')
            # check if the django user and FB user match:
            if graph.user_id <> request.user.user.id:
                logger.debug(
                    'User %s already connected with Facebook account %s' %
                    (request.user.get_full_name, request.user.user._name))
                auth_views.logout(request, next_page=reverse('fb_app'))
            # Otherwise redirect
            return redirect(redirect_to)
        else:
            # The User has no Facebook account attached. Connect him.
            try:
                # if that facebook user already exists, abort and show error message
                fb_user = FacebookUser.objects.get(id=graph.user_id)
            except FacebookUser.DoesNotExist:
                fb_user = FacebookUser(id=graph.user_id)
                fb_user.get_from_facebook(graph=graph, save=True)
            else:
                if isinstance(fb_user.user, User):
                    auth_views.logout(request, next_page=reverse('fb_login'))
                else:
                    fb_user.user = request.user
                    fb_user.save()
            finally:
                return redirect(redirect_to)

    else:
        # The user is not logged in
        # -> redirect to login page
        return redirect('fb_login')
def connect(request, redirect_field_name=REDIRECT_FIELD_NAME, app_name=None):
    """ Connects the Facebook Account to the current logged-in user. """
    fb_app = get_app_dict(app_name)
    graph = get_graph(request, app_name=app_name)
    redirect_to = request.REQUEST.get(redirect_field_name, fb_app['REDIRECT-URL'])

    if request.user.is_authenticated():
        try:
            me = graph.get_object("me")
        except facebook.GraphAPIError as e:
            return redirect('fb_login')

        # if the user has already a facebook connection, abort and show
        # error message
        if hasattr(request.user, 'user'):
            logger.debug('The logged in user is already connected.')
            # check if the django user and FB user match:
            if graph.user_id <> request.user.user.id:
                logger.debug('User %s already connected with Facebook account %s' % (request.user.get_full_name, request.user.user._name))
                auth_views.logout(request, next_page=reverse('fb_app'))
            # Otherwise redirect
            return redirect(redirect_to)
        else:
            # The User has no Facebook account attached. Connect him.
            try:
                # if that facebook user already exists, abort and show error message
                fb_user = FacebookUser.objects.get(id=graph.user_id)
            except FacebookUser.DoesNotExist:
                fb_user = FacebookUser(id=graph.user_id)
                fb_user.get_from_facebook(graph=graph, save=True)
            else:
                if isinstance(fb_user.user, User):
                    auth_views.logout(request, next_page=reverse('fb_login'))
                else:
                    fb_user.user = request.user
                    fb_user.save()
            finally:
                return redirect(redirect_to)

    else:
        # The user is not logged in
        # -> redirect to login page
        return redirect('fb_login')
def register():
    flash(
        '''Here for a demo and don't want to use your real details, you can register using fake info 
    \n or login using: 'email': [email protected], 'password': '******' ''')
    if current_user.is_authenticated:
        return redirect(url_for('index'))
    form = RegistrationForm()
    if form.validate_on_submit():
        user = User(f_name=form.f_name.data,
                    l_name=form.l_name.data,
                    email=form.email.data.lower(),
                    gender=form.gender.data,
                    dob=form.dob.data)
        user.set_username(form.f_name.data, form.l_name.data)
        user.set_password(form.password.data.lower())
        db.session.add(user)
        db.session.commit()
        flash('Congratulations, you are now a registered user!')
        return redirect(url_for('login'))
    return render_template('register.html', title='Sign Up', form=form)
Exemple #8
0
    def authenticate(self, graph=None):
        if not graph:
            raise AttributeError, 'Authentication Backend needs a valid graph.'

        # check if the access token is valid:
        try:
            me = graph.request('me')
        except facebook.GraphAPIError as e:
            logger.debug('Could not authenticate User: %s ' % e)
            return None

        try:
            facebook_user = FacebookUser.objects.get(id=int(me['id']))
        except FacebookUser.DoesNotExist:
            facebook_user = FacebookUser(id=int(me['id']))
            facebook_user.get_from_facebook(graph=graph, save=True)
        else:
            try:
                if isinstance(facebook_user.user,
                              User) and facebook_user.user.is_authenticated():
                    return facebook_user.user
            except User.DoesNotExist:
                pass
        #we use the Facebook id as username because 'me.name' is not unique enough.
        user = get_or_create_user(
            me['id'], {
                'email': me.get('email', u''),
                'first_name': me.get('first_name', u''),
                'last_name': me.get('last_name', u''),
                'password': UNUSABLE_PASSWORD,
                'date_joined': datetime.now()
            })
        facebook_user.user = user
        facebook_user.save()

        return user
from facebook.models import User, Post, Comment, Reply, Expression, PostExpression, GenericExpression

# delete all data
User.objects.all().delete()
Post.objects.all().delete()
Comment.objects.all().delete()
Reply.objects.all().delete()
Expression.objects.all().delete()
PostExpression.objects.all().delete()
GenericExpression.objects.all().delete()

# create users
u1 = User(name="Joe Biden", email="*****@*****.**")
u1.save()

u2 = User(name="Jill Biden", email="*****@*****.**")
u2.save()

# create posts
p1 = Post(poster=u1, text="We sent Major and Champ back home :(")
p1.save()

p2 = Post(poster=u1, text="Stimulus Care Package got passed!")
p2.save()

# create comments
c1 = Comment(commenter=u2, text="Major bit one of our security staff", post=p1)
c1.save()

c2 = Comment(commenter=u2, text="Sad to see the dogs leave", post=p1)
c2.save()