Administrar permisos en el inicio de sesión con Facebook en sitios web

Una de las partes más importantes al activar el cuadro de diálogo de inicio de sesión es elegir a qué datos quieres que tenga acceso la aplicación. Todos estos ejemplos utilizan el parámetro scope, que es el modo de solicitar el acceso a los datos de una persona. Reciben el nombre de permisos.

Puedes encontrar información más detallada en nuestra guía de permisos. Cuando trabajes con los permisos y el cuadro de diálogo de inicio de sesión, recuerda que:

  • Los permisos se solicitan al crear el cuadro de diálogo. El conjunto de permisos resultante queda vinculado al token de acceso devuelto.
  • Otras plataformas pueden tener conjuntos de permisos distintos. Por ejemplo, en iOS puedes solicitar los lugares en los que se etiquetó a una persona, mientras que en la versión web de la aplicación, este permiso no es necesario para la experiencia.
  • Puedes agregar permisos más tarde, cuando necesites nuevas funciones. Si necesitas un nuevo permiso, solo tienes que agregarlo 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 permiso.
  • Este 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 admitir esta circunstancia. Puedes consultar la información sobre el cuadro de diálogo de permisos.
  • Facebook debe revisar las aplicaciones que soliciten más información que los campos predeterminados y el permiso emailantes de que estén disponibles para el público en general. Obtén más información en la documentación sobre revisión del inicio de sesión y las normas de revisión generales.

Cómo agregar permisos

Una de las prácticas recomendadas para el inicio de sesión con Facebook es no solicitar al mismo tiempo permisos de lectura y de publicación. Para seguir esta práctica, tu aplicación puede solicitar otros permisos más tarde, mucho después de que las personas hayan iniciado sesión. Para llevarlo a cabo, solo debes iniciar el cuadro de diálogo de inicio de sesión con los nuevos permisos que solicites.

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

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

Si revisaras en /me/permissions los permisos concedidos después de que la persona aceptó el proceso, encontrarías esto:

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

Si quisieras agregar el permiso email más adelante, podrías volver a iniciar el cuadro de diálogo con la función FB.login(), así:

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

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

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

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

Fíjate que el nuevo permiso email se haya agregado a la lista de permisos concedidos.

Volver a solicitar permisos rechazados

El inicio de sesión con Facebook permite a las personas no conceder algunos permisos a la aplicación. Sin embargo, si alguien desmarca user_likes (Me gusta) en este ejemplo y compruebas /me/permissions para determinar qué permisos se concedieron obtendrás el siguiente resultado:

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

Ten en cuenta que user_likes se rechazó en lugar de concederse.

Es aceptable pedir una vez a una persona que conceda a la aplicación permisos que ya rechazó. Muéstrale una pantalla informativa que explique por qué es importante que conceda el permiso y, después, vuelve a solicitarlo. Sin embargo, si utilizas el método descrito en la sección anterior, el cuadro de diálogo de inicio de sesión no pedirá ese permiso.

El motivo es que, una vez que se rechaza un permiso, el cuadro de diálogo de inicio de sesión no lo vuelve a solicitar a menos que se lo indiques explícitamente.

Esto se hace agregando 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 los permisos rechazados. Tendrá un aspecto muy similar al de la sección sobre volver a solicitar permisos, pero te permitirá solicitar de nuevo un permiso rechazado.