def get_facebook_graph( request=None, access_token=None, persistent_token=facebook_settings.FACEBOOK_PERSISTENT_TOKEN): ''' given a request from one of these - js authentication flow - facebook app authentication flow - mobile authentication flow store authentication data in the session returns a graph object ''' if not request and persistent_token: raise ValidationError, 'Request is required if you want to use persistent tokens' from django_facebook import official_sdk additional_data = None facebook_open_graph_cached = False if persistent_token: facebook_open_graph_cached = request.session.get('facebook_open_graph') if facebook_open_graph_cached: #TODO: should handle this in class' pickle protocol, but this is easier facebook_open_graph_cached._is_authenticated = None if not access_token: signed_request = request.REQUEST.get('signed_request') cookie_name = 'fbs_%s' % facebook_settings.FACEBOOK_APP_ID oauth_cookie = request.COOKIES.get(cookie_name) #scenario A, we're on a canvas page and need to parse the signed data if signed_request: additional_data = FacebookAPI.parse_signed_data(signed_request) access_token = additional_data.get('oauth_token') #scenario B, we're using javascript and cookies to authenticate elif oauth_cookie: additional_data = official_sdk.get_user_from_cookie( request.COOKIES, facebook_settings.FACEBOOK_APP_ID, facebook_settings.FACEBOOK_APP_SECRET) access_token = additional_data.get('access_token') facebook_open_graph = FacebookAPI(access_token, additional_data) if facebook_open_graph.access_token and persistent_token: request.session['facebook_open_graph'] = facebook_open_graph elif facebook_open_graph_cached: facebook_open_graph = facebook_open_graph_cached return facebook_open_graph
def get_facebook_graph(request=None, access_token=None, persistent_token=facebook_settings.FACEBOOK_PERSISTENT_TOKEN): ''' given a request from one of these - js authentication flow - facebook app authentication flow - mobile authentication flow store authentication data in the session returns a graph object ''' if not request and persistent_token: raise ValidationError, 'Request is required if you want to use persistent tokens' from django_facebook import official_sdk additional_data = None facebook_open_graph_cached = False if persistent_token: facebook_open_graph_cached = request.session.get('facebook_open_graph') if facebook_open_graph_cached: #TODO: should handle this in class' pickle protocol, but this is easier facebook_open_graph_cached._is_authenticated = None if not access_token: signed_request = request.REQUEST.get('signed_request') cookie_name = 'fbs_%s' % facebook_settings.FACEBOOK_APP_ID oauth_cookie = request.COOKIES.get(cookie_name) #scenario A, we're on a canvas page and need to parse the signed data if signed_request: additional_data = FacebookAPI.parse_signed_data(signed_request) access_token = additional_data.get('oauth_token') #scenario B, we're using javascript and cookies to authenticate elif oauth_cookie: additional_data = official_sdk.get_user_from_cookie(request.COOKIES, facebook_settings.FACEBOOK_APP_ID, facebook_settings.FACEBOOK_APP_SECRET) access_token = additional_data.get('access_token') facebook_open_graph = FacebookAPI(access_token, additional_data) if facebook_open_graph.access_token and persistent_token: request.session['facebook_open_graph'] = facebook_open_graph elif facebook_open_graph_cached: facebook_open_graph = facebook_open_graph_cached return facebook_open_graph
def get_facebook_graph(request=None, access_token=None, persistent_token=facebook_settings.FACEBOOK_PERSISTENT_TOKEN): ''' given a request from one of these - js authentication flow - facebook app authentication flow - mobile authentication flow store authentication data in the session returns a graph object ''' if not request and persistent_token: raise ValidationError, 'Request is required if you want to use persistent tokens' from django_facebook import official_sdk additional_data = None facebook_open_graph_cached = False if persistent_token: logger.debug('Get cached facebook_open_graph ') facebook_open_graph_cached = request.session.get('facebook_open_graph') if facebook_open_graph_cached: #TODO: should handle this in class' pickle protocol, but this is easier facebook_open_graph_cached._is_authenticated = None signed_request = request.REQUEST.get('signed_request') cookie_name = 'fbs_%s' % facebook_settings.FACEBOOK_APP_ID oauth_cookie = request.COOKIES.get(cookie_name) #scenario A, we're on a canvas page and need to parse the signed data if signed_request: logger.debug('found signed request..') additional_data = FacebookAPI.parse_signed_data(signed_request) logger.debug('signed_data: '+str(additional_data)) access_token = additional_data.get('oauth_token') #scenario B, we're using javascript and cookies to authenticate elif oauth_cookie: logger.debug('found oauth cookie...') additional_data = official_sdk.get_user_from_cookie(request.COOKIES, facebook_settings.FACEBOOK_APP_ID, facebook_settings.FACEBOOK_APP_SECRET) additional_data["user_id"] = additional_data["uid"] logger.debug('oauth cookie: signed_data: '+str(additional_data)) access_token = additional_data.get('access_token') facebook_open_graph = FacebookAPI(access_token, additional_data) if facebook_open_graph.access_token and persistent_token: logger.debug('storing facebook_open_graph in session..') request.session['facebook_open_graph'] = facebook_open_graph elif facebook_open_graph_cached: logger.debug('Using cached facebook_open_graph ') facebook_open_graph = facebook_open_graph_cached # Check if the OAuth token has expired if facebook_open_graph.additional_data.has_key('expires'): if datetime.fromtimestamp(float(facebook_open_graph.additional_data['expires'])) < datetime.now(): logger.debug('FB Access token expired, revalidate!') facebook_open_graph._is_authenticated = None return facebook_open_graph