'Handles the login for the Facebook user, returning a user object.
Example usage::
class FacebookGraphLoginHandler(LoginHandler, tornado.auth.FacebookGraphMixin):
@tornado.gen.coroutine
def get(self):
if self.get_argument("code", False):
user = yield self.get_authenticated_user(
redirect_uri=\'/auth/facebookgraph/\',
client_id=self.settings["facebook_api_key"],
client_secret=self.settings["facebook_secret"],
code=self.get_argument("code"))
# Save the user with e.g. set_secure_cookie
else:
yield self.authorize_redirect(
redirect_uri=\'/auth/facebookgraph/\',
client_id=self.settings["facebook_api_key"],
extra_params={"scope": "read_stream,offline_access"})'

@_auth_return_future
def get_authenticated_user(self, redirect_uri, client_id, client_secret, code, callback, extra_fields=None):

    http = self.get_auth_http_client()
    args = {'redirect_uri': redirect_uri, 'code': code, 'client_id': client_id, 'client_secret': client_secret}
    fields = set(['id', 'name', 'first_name', 'last_name', 'locale', 'picture', 'link'])
    if extra_fields:
        fields.update(extra_fields)
    http.fetch(self._oauth_request_token_url(**args), functools.partial(self._on_access_token, redirect_uri, client_id, client_secret, callback, fields))
