Administración de permisos en el inicio de sesión con Facebook para la web

Una de las cuestiones más importantes al iniciar el cuadro de diálogo de inicio de sesión es elegir los datos a los que debe tener acceso la aplicación. En todos los ejemplos anteriores se ha utilizado el parámetro scope para solicitar el acceso a los datos de una persona. Es lo que se conoce como permisos.

Puedes encontrar información más detallada en la guía de permisos. Además, cuando trabajes con los permisos y el cuadro de diálogo de inicio de sesión, ten en cuenta lo siguiente:

  • Solicitas permisos al crear el cuadro de diálogo. El conjunto de permisos resultante queda vinculado al identificador de acceso devuelto.
  • Otras plataformas pueden tener conjuntos de permisos distintos. Por ejemplo, en iOS puedes solicitar los lugares en los que se ha etiquetado a una persona, mientras que en la versión web de la aplicación este permiso no es necesario para la experiencia.
  • Puedes añadir permisos más adelante cuando necesites nuevas funciones. Si precisas un nuevo permiso, solo tienes que añadirlo a la lista de los que ya tienes. Vuelve a iniciar el cuadro de diálogo de inicio de sesión y este solicitará el nuevo permiso.
  • El cuadro de diálogo de inicio de sesión permite a las personas rechazar los permisos que no quieran conceder a la aplicación. La aplicación debe gestionar estos casos. Para obtener más información, consulta la referencia sobre el cuadro de diálogo de permisos.
  • Las aplicaciones que soliciten información adicional a la de los campos predeterminados y el permiso emaildeben someterse al proceso de revisión de Facebook antes de ponerse a disposición del público general. Tienes más información en la documentación sobre revisión del inicio de sesión y las normas generales sobre revisión.

Añadir permisos

Una de las prácticas recomendadas del inicio de sesión con Facebook es no solicitar al mismo tiempo permisos de lectura y de publicación. Para cumplir con esta práctica, tu aplicación puede solicitar permisos adicionales más tarde, después de que las personas hayan iniciado sesión. Lo único que tienes que hacer es iniciar el cuadro de diálogo de inicio de sesión con el nuevo permiso que quieres solicitar.

Por ejemplo, supongamos que tienes un botón "Iniciar sesión" con los siguientes permisos:

<fb:login-button scope="public_profile" onlogin="checkLoginState();">
</fb:login-button>

Si revisas en /me/permissions los permisos concedidos después de que la persona acepte, encontrarás esto:

{"data":
  [
    {
      "permission":"public_profile",
      "status":"granted"
    }
  ]
}

Si quieres añadir el permiso email más adelante, puedes volver a iniciar el cuadro de diálogo con la función FB.login() como se indica a continuación:

FB.login(function(response) {
   console.log(response);
}, {scope: 'email'});

(La llamada a esta función debe realizarse desde el gestor de eventos de un botón; en caso contrario, es probable que el bloqueo de ventanas emergentes del navegador la bloquee).

Observa que únicamente solicita el nuevo permiso. Si aceptas el nuevo permiso y revisas /me/permissions, verás lo siguiente:

{"data":
  [
    {
      "permission":"public_profile",
      "status":"granted"
    },
    {
      "permission":"email",
      "status":"granted"
    }
  ]
}

Observa que el nuevo permiso email se ha añadido a la lista de permisos permitidos.

Nueva solicitud de permisos rechazados

El inicio de sesión con Facebook permite a las personas rechazar la asignación de determinados permisos a la aplicación. Si alguien desmarca user_likes (Me gusta), al revisar /me/permissions para determinar qué permisos se han concedido, el resultado será el siguiente:

{
  "data":
    [
      {
        "permission":"public_profile",
        "status":"granted"
      },
      {
        "permission":"user_likes",
        "status":"declined"
      }
    ]
}

Ten en cuenta que user_likes se ha rechazado, no concedido.

Se puede volver a solicitar una vez a una persona que conceda a la aplicación permisos que ya rechazó. Deberías mostrar una pantalla informativa que explique por qué piensas que debería reconsiderarlo y, después, solicitar el permiso de nuevo. Sin embargo, si utilizas el método descrito en la sección anterior, el cuadro de diálogo de inicio de sesión no solicitará ese permiso.

El motivo es que, una vez que se rechaza un permiso, el cuadro de diálogo de inicio de sesión no vuelve a solicitarlo, salvo que le indiques expresamente que solicite de nuevo un permiso rechazado.

Esto se hace añadiendo la marca auth_type: rerequest a la llamada a FB.login():

FB.login(
  function(response) {
    console.log(response);
  },
  {
    scope: 'user_likes',
    auth_type: 'rerequest'
  }
);

Al hacerlo, el cuadro de diálogo de inicio de sesión volverá a solicitar el permiso rechazado. El cuadro de diálogo tendrá un aspecto muy similar al de la sección sobre la solicitud reiterada de permisos, aunque te permitirá solicitar de nuevo un permiso rechazado.