]> git.parisson.com Git - django-social-auth.git/commitdiff
Merge remote-tracking branch 'upstream/master'
authorStas Kravets <krvss@mail.ru>
Sat, 1 Oct 2011 15:24:56 +0000 (19:24 +0400)
committerStas Kravets <krvss@mail.ru>
Sat, 1 Oct 2011 15:24:56 +0000 (19:24 +0400)
Conflicts:
social_auth/backends/facebook.py

1  2 
social_auth/backends/__init__.py
social_auth/backends/facebook.py

Simple merge
index 249fc473cf2643dd01339c0f54ea24fab8029477,90c6664b0daf8237a67bb625d41358013ec3a976..f38636400f0b1547441e5843fba3b0edb32458fd
@@@ -52,26 -45,40 +49,43 @@@ class FacebookBackend(OAuthBackend)
                  'last_name': response.get('last_name', '')}
  
  
- class FacebookAuth(BaseOAuth):
-     """Facebook OAuth mechanism"""
+ class FacebookAuth(BaseOAuth2):
+     """Facebook OAuth2 support"""
      AUTH_BACKEND = FacebookBackend
+     RESPONSE_TYPE = None
+     SCOPE_SEPARATOR = ','
+     AUTHORIZATION_URL = 'https://www.facebook.com/dialog/oauth'
+     SETTINGS_KEY_NAME = 'FACEBOOK_APP_ID'
+     SETTINGS_SECRET_NAME = 'FACEBOOK_API_SECRET'
+     def get_scope(self):
+         return getattr(settings, 'FACEBOOK_EXTENDED_PERMISSIONS', [])
  
-     def auth_url(self):
-         """Returns redirect url"""
-         args = {'client_id': settings.FACEBOOK_APP_ID,
-                 'redirect_uri': self.redirect_uri}
-         if hasattr(settings, 'FACEBOOK_EXTENDED_PERMISSIONS'):
-             args['scope'] = ','.join(settings.FACEBOOK_EXTENDED_PERMISSIONS)
-         args.update(self.auth_extra_arguments())
-         return FACEBOOK_AUTHORIZATION_URL + '?' + urlencode(args)
+     def user_data(self, access_token):
+         """Loads user data from service"""
+         params = {'access_token': access_token,}
+         url = 'https://graph.facebook.com/me?' + urlencode(params)
+         try:
+             data = simplejson.load(urlopen(url))
+             logger.debug('Found user data for token %s',
+                          sanitize_log_data(access_token),
+                          extra=dict(data=data))
+             return data
+         except ValueError:
+             params.update({'access_token': sanitize_log_data(access_token)})
+             logger.error('Could not load user data from Facebook.',
+                          exc_info=True, extra=dict(data=params))
+             return None
  
      def auth_complete(self, *args, **kwargs):
-         """Returns user, might be logged in"""
+         """Completes loging process, must return user instance"""
 +        access_token = None
 +        expires = None
 +
          if 'code' in self.data:
-             url = FACEBOOK_ACCESS_TOKEN_URL + '?' + \
+             url = 'https://graph.facebook.com/oauth/access_token?' + \
                    urlencode({'client_id': settings.FACEBOOK_APP_ID,
                               'redirect_uri': self.redirect_uri,
                               'client_secret': settings.FACEBOOK_API_SECRET,
                      raise ValueError('Authentication error: %s' % error)
                  data['access_token'] = access_token
                  # expires will not be part of response if offline access
 -                # premission was requested
 -                if 'expires' in response:
 -                    data['expires'] = response['expires'][0]
 +                # premission was requested                
 +                if expires:
 +                    data['expires'] = expires
-             kwargs.update({'response': data, FacebookBackend.name: True})
+             kwargs.update({'response': data, self.AUTH_BACKEND.name: True})
              return authenticate(*args, **kwargs)
          else:
              error = self.data.get('error') or 'unknown error'