Merge remote branch 'slay2k/fb_fix_graph_mixin'
This commit is contained in:
commit
8e4a7730d3
|
@ -922,7 +922,7 @@ class FacebookGraphMixin(OAuth2Mixin):
|
||||||
_OAUTH_NO_CALLBACKS = False
|
_OAUTH_NO_CALLBACKS = False
|
||||||
|
|
||||||
def get_authenticated_user(self, redirect_uri, client_id, client_secret,
|
def get_authenticated_user(self, redirect_uri, client_id, client_secret,
|
||||||
code, callback):
|
code, callback, extra_fields=None):
|
||||||
""" Handles the login for the Facebook user, returning a user object.
|
""" Handles the login for the Facebook user, returning a user object.
|
||||||
|
|
||||||
Example usage:
|
Example usage:
|
||||||
|
@ -955,42 +955,48 @@ class FacebookGraphMixin(OAuth2Mixin):
|
||||||
"client_secret": client_secret,
|
"client_secret": client_secret,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if extra_fields and not isinstance(extra_fields, (set, frozenset)):
|
||||||
|
extra_fields = set(extra_fields)
|
||||||
|
|
||||||
http.fetch(self._oauth_request_token_url(**args),
|
http.fetch(self._oauth_request_token_url(**args),
|
||||||
self.async_callback(self._on_access_token, redirect_uri, client_id,
|
self.async_callback(self._on_access_token, redirect_uri, client_id,
|
||||||
client_secret, callback))
|
client_secret, callback, extra_fields))
|
||||||
|
|
||||||
def _on_access_token(self, redirect_uri, client_id, client_secret,
|
def _on_access_token(self, redirect_uri, client_id, client_secret,
|
||||||
callback, response):
|
callback, extra_fields, response):
|
||||||
|
if response.error:
|
||||||
|
logging.warning('Facebook auth error: %s' % str(response))
|
||||||
|
callback(None)
|
||||||
|
return
|
||||||
|
|
||||||
session = {
|
session = {
|
||||||
"access_token": cgi.parse_qs(response.body)["access_token"][-1],
|
"access_token": cgi.parse_qs(response.body)["access_token"][-1],
|
||||||
"expires": cgi.parse_qs(response.body).get("expires")
|
"expires": cgi.parse_qs(response.body).get("expires")
|
||||||
}
|
}
|
||||||
|
|
||||||
self.facebook_request(
|
self.facebook_request(
|
||||||
path="/me",
|
path="/me",
|
||||||
callback=self.async_callback(
|
callback=self.async_callback(
|
||||||
self._on_get_user_info, callback, session),
|
self._on_get_user_info, callback, session, extra_fields),
|
||||||
access_token=session["access_token"],
|
access_token=session["access_token"],
|
||||||
fields="picture"
|
fields="picture" # This one's exceptional in that it appends to fields returned
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def _on_get_user_info(self, callback, session, user):
|
def _on_get_user_info(self, callback, session, extra_fields, user):
|
||||||
if user is None:
|
if user is None:
|
||||||
callback(None)
|
callback(None)
|
||||||
return
|
return
|
||||||
callback({
|
|
||||||
"name": user["name"],
|
fields = set(['id', 'name', 'first_name', 'last_name', 'locale', 'picture', 'link'])
|
||||||
"first_name": user["first_name"],
|
if extra_fields: fields.update(extra_fields)
|
||||||
"last_name": user["last_name"],
|
|
||||||
"id": user["id"],
|
fieldmap = {}
|
||||||
"locale": user["locale"],
|
for field in fields:
|
||||||
"picture": user.get("picture"),
|
fieldmap[field] = user.get(field)
|
||||||
"link": user["link"],
|
|
||||||
"username": user.get("username"),
|
fieldmap.update({"access_token": session["access_token"], "session_expires": session.get("expires")})
|
||||||
"access_token": session["access_token"],
|
callback(fieldmap)
|
||||||
"session_expires": session.get("expires"),
|
|
||||||
})
|
|
||||||
|
|
||||||
def facebook_request(self, path, callback, access_token=None,
|
def facebook_request(self, path, callback, access_token=None,
|
||||||
post_args=None, **args):
|
post_args=None, **args):
|
||||||
|
|
Loading…
Reference in New Issue