From: Stas Kravets Date: Sat, 1 Oct 2011 15:24:56 +0000 (+0400) Subject: Merge remote-tracking branch 'upstream/master' X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=6feae4562f26dc9c412d7d3fef7d73db9244be55;p=django-social-auth.git Merge remote-tracking branch 'upstream/master' Conflicts: social_auth/backends/facebook.py --- 6feae4562f26dc9c412d7d3fef7d73db9244be55 diff --cc social_auth/backends/facebook.py index 249fc47,90c6664..f386364 --- a/social_auth/backends/facebook.py +++ b/social_auth/backends/facebook.py @@@ -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, @@@ -114,10 -92,10 +128,10 @@@ 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'