Last active
December 11, 2015 11:58
-
-
Save dannyroa/4596978 to your computer and use it in GitHub Desktop.
'code' should only be used once. Once the 'code' is used to obtain the 'access_token', store the 'access_token' to the session. Use 'access_token' if available in the session.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.contrib.auth.models import User | |
from facebookconnect.models import FacebookProfile | |
from django.conf import settings | |
from django.core.urlresolvers import reverse | |
import facebook | |
from facebookconnect.utils import facebook_login_check, get_access_token | |
class FacebookConnectBackend: | |
""" | |
Authenticates against django.contrib.auth.models.User. | |
""" | |
@ staticmethod | |
def authenticate(request): | |
cookie = facebook_login_check(request.COOKIES) | |
if cookie: | |
facebook_user_id = cookie["uid"] | |
access_token = cookie["access_token"] | |
elif 'access_token' in request.session: | |
access_token = request.session['access_token'] | |
graph = facebook.GraphAPI(access_token) | |
profile = graph.get_object("me") | |
facebook_user_id = str(profile["id"]) | |
elif request.GET.has_key('code'): | |
url = reverse('facebookconnect_authenticate') | |
next_url = request.GET.get('next', None) | |
if next_url: | |
url = '%s?next=%s' % (url, next_url) | |
access_token = get_access_token(request.GET['code'], url) | |
request.session['access_token'] = access_token | |
graph = facebook.GraphAPI(access_token) | |
profile = graph.get_object("me") | |
facebook_user_id = str(profile["id"]) | |
else: | |
return None | |
try: | |
fb_profile = FacebookProfile.objects.get(facebook_id=facebook_user_id) | |
fb_profile.user.backend='facebookconnect.backends.FacebookConnectBackend' | |
fb_profile.access_token = access_token | |
fb_profile.save() | |
return fb_profile.user | |
except FacebookProfile.DoesNotExist: | |
return None | |
def get_user(self, user_id): | |
try: | |
return User.objects.get(pk=user_id) | |
except User.DoesNotExist: | |
return None |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def fbc_authenticate_backend(request, next_url=None): | |
#import ipdb; ipdb.set_trace() | |
user = FacebookConnectBackend.authenticate(request) | |
message = '' | |
created = False | |
authenticated = False | |
created = False | |
if user is None: | |
cookie = facebook_login_check(request.COOKIES) | |
if not cookie and not request.GET.has_key('code'): | |
return False, user, created | |
if not cookie: | |
#code = request.GET['code'] | |
#redirect_uri = '%s%s' % (settings.DOMAIN, reverse('facebookconnect_authenticate')) | |
#access_token = get_access_token(code, redirect_uri) | |
access_token = request.session['access_token'] | |
else: | |
access_token = cookie["access_token"] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment