Objetivo: Crear una aplicación canvas.

Dos puntos de entrada de información de facebook.

1º a través de la página de inicio se pasa una variable por POST con nombre 'signed_request'. Esta variable se puede parsear a través de la función parse_signed_request(signed_request, app_secret). Tiene dos posibles contenidos en función de si el usuario ha dado permiso o no a la aplicación.

    1.1 El usuario sí ha dado persmiso. Contiene por ejemplo:
        'user_id': '100005466480745', 
        'algorithm': 'HMAC-SHA256', 
        'expires': 1365447600, 
        'oauth_token': 'AAADOARsZCbhkBAJUIlFV5F7267CgJrZAdkQgmV1dugLqrSkcNhAQ5mexlg9VZBmog3EePcO6hc6fUDupJqfKUJCZCh5xqbVPecrZAKfs22dHL1bHBNhs5', 
        'user': {
            'locale': 'es_ES', 
            'country': 'es', 
            'age': {'min': 21}}, 
            'issued_at': 1365441503
        }

    1.2 El usuario no ha dado persmiso. Contiene por ejemplo:

        'issued_at': 1365441657, 
        'user': {
            'locale': 'es_ES', 
            'country': 'es', 
            'age': {'min': 21}}, 
            'algorithm': 'HMAC-SHA256'
        }

    La difrencia básica es el oauth_token que permite obtener o no los datos del cliente. Con esos datos se puede llamar al motor de autenticación con el backend que se ha creado y poder autenticar y posteriormente loguear a éste con las llamadas:

2º a través de un formulario de solicitud de permisos. 

    si se invoca la url (que también se puede generar a través del API) https://www.facebook.com/dialog/oauth?scope=PARAMS&redirect_uri=REDIRECT_URI&display=MODE&client_id=FACEBOOK_APP_ID&response_type=code se mostrará una    pantalla a través de la cual el usuario dará permisos (o no) a la aplicación. Una vez hecho esto el formulario se redirigirá a la url REDIRECT_URI pasandole el parametro GET 'code'. Dicho code se puede transformar en una oauth_token con la función del API get_access_token_from_code(...)





Ejemplo de autenticación y login de usuario:


        user = auth.authenticate(token='XXXXXXXXXXXXXXX')
        if user is not None:
            if user.is_active:
                auth.login(request, user)
                # Redirect to a success page.
            else:
                # Return a 'disabled account' error message
                pass
        else:
            # Return an 'invalid login' error message.
            pass
