From dbc38cef60897028891425c921dd0eca8c20a2e1 Mon Sep 17 00:00:00 2001 From: jordan Date: Fri, 16 Dec 2011 12:05:31 +0000 Subject: [PATCH] some facebook oauth 2.0 fixes, use user id for following association, pass the access_token to the get_data method of the facebook authentication provider class git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@1213 0cfe37f9-358a-4d5e-be75-b63607b5c754 --- forum/views/auth.py | 6 +++++- forum_modules/facebookauth/authentication.py | 15 +++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/forum/views/auth.py b/forum/views/auth.py index 9e7d6c6..bac7639 100644 --- a/forum/views/auth.py +++ b/forum/views/auth.py @@ -196,7 +196,11 @@ def external_register(request): provider_class = AUTH_PROVIDERS[auth_provider].consumer - user_data = provider_class.get_user_data(request.session['assoc_key']) + if provider_class.__class__.__name__ == 'FacebookAuthConsumer': + user_data = provider_class.get_user_data(request.session['access_token']) + else: + user_data = provider_class.get_user_data(request.session['assoc_key']) + if not user_data: user_data = request.session.get('auth_consumer_data', {}) diff --git a/forum_modules/facebookauth/authentication.py b/forum_modules/facebookauth/authentication.py index 55cf16d..8562bad 100644 --- a/forum_modules/facebookauth/authentication.py +++ b/forum_modules/facebookauth/authentication.py @@ -44,16 +44,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 +75,7 @@ class FacebookAuthConsumer(AuthenticationConsumer): # Return the user data. return { + 'id' : profile['id'], 'username': name, 'email': email, } -- 2.45.1