]> git.openstreetmap.org Git - osqa.git/blobdiff - forum_modules/facebookauth/authentication.py
Merge pull request #46 from udacity/subfolder_fixes
[osqa.git] / forum_modules / facebookauth / authentication.py
index 55cf16d88b4d986de0169b96b0be8d4a861fa2a4..c98eaf1b193ea29aff2192e19a143612496b4430 100644 (file)
@@ -8,18 +8,13 @@ from forum.authentication.base import AuthenticationConsumer, ConsumerTemplateCo
 
 from django.conf import settings as django_settings
 from django.utils.encoding import smart_unicode
+from django.core.urlresolvers import reverse
 from django.utils.translation import ugettext as _
 
 import settings
 
-try:
-    from json import load as load_json
-except Exception:
-    from django.utils.simplejson import JSONDecoder
+from json import load as load_json
 
-    def load_json(json):
-        decoder = JSONDecoder()
-        return decoder.decode(json.read())
 
 class FacebookAuthConsumer(AuthenticationConsumer):
 
@@ -33,10 +28,11 @@ class FacebookAuthConsumer(AuthenticationConsumer):
         facebook_api_authentication_url = "https://graph.facebook.com/oauth/authorize?" + urlencode(args)
 
         return facebook_api_authentication_url
-    
+
     def process_authentication_request(self, request):
         try:
-            args = dict(client_id=settings.FB_API_KEY, redirect_uri="%s%s" % (django_settings.APP_URL, request.path))
+            redirect_uri = "%s%s" % (django_settings.APP_URL, reverse('auth_provider_done', prefix='/', kwargs={'provider': 'facebook'}))
+            args = dict(client_id=settings.FB_API_KEY, redirect_uri=redirect_uri)
 
             args["client_secret"] = settings.FB_APP_SECRET  #facebook APP Secret
 
@@ -44,16 +40,22 @@ class FacebookAuthConsumer(AuthenticationConsumer):
             response = cgi.parse_qs(urlopen("https://graph.facebook.com/oauth/access_token?" + urlencode(args)).read())
             access_token = response["access_token"][-1]
 
+
+            user_data = self.get_user_data(access_token)
+            assoc_key = user_data["id"]
+
             # Store the access token in cookie
-            request.session["assoc_key"] = access_token
+            request.session["access_token"] = access_token
+            request.session["assoc_key"] = assoc_key
 
-            return access_token
+            # Return the association key
+            return assoc_key
         except Exception, e:
             logging.error("Problem during facebook authentication: %s" % e)
             raise InvalidAuthentication(_("Something wrond happened during Facebook authentication, administrators will be notified"))
 
-    def get_user_data(self, assoc_key):
-        profile = load_json(urlopen("https://graph.facebook.com/me?" + urlencode(dict(access_token=assoc_key))))
+    def get_user_data(self, access_token):
+        profile = load_json(urlopen("https://graph.facebook.com/me?" + urlencode(dict(access_token=access_token))))
 
         name = profile["name"]
 
@@ -69,6 +71,7 @@ class FacebookAuthConsumer(AuthenticationConsumer):
 
         # Return the user data.
         return {
+            'id' : profile['id'],
             'username': name,
             'email': email,
         }