Intentando que Facebook Login funcione con mi aplicación next-auth / nextjs.
Todo funciona cuando selecciono una Consumer App y está en modo de desarrollo.
Sin embargo, quiero usar las características de la aplicación tipo Business App . Las aplicaciones comerciales en Facebook no tienen modo de desarrollo/modo de producción. En cambio, todo se gestiona a través de niveles de acceso. Los primeros 2 tipos en esta lista es a lo que me refiero:
Ahora, cuando lo pruebo con una aplicación para consumidores, todo funciona bien. Sin embargo, no funciona para mí cuando uso una aplicación comercial. Obtuve el siguiente error:
URL bloqueada Esta redirección falló porque el URI de redirección no está en la lista blanca en la configuración de OAuth del cliente de la aplicación. Asegúrese de que los inicios de sesión de OAuth web y del cliente estén activados y agregue todos los dominios de su aplicación como URI de redireccionamiento de OAuth válidos.
Sin embargo, no puedo agregar la URL a los URI de redirección de OAuth válidos, ya que Facebook me dice que localhost se aprueba automáticamente en el modo de desarrollo, por lo que no me permite agregarlo. Pero esto es extraño, ya que no existe un "modo de desarrollo" para las aplicaciones empresariales.
Mira estas 2 imágenes:
Lo encontré un poco extraño, así que lo implementé en producción y lo probé: funciona.
Así que Consumer App + localhost funciona, Business App + Localhost no funciona, Business App + Production funciona.
¿Alguien sabe cuál es el problema con localhost + aplicaciones comerciales en Facebook? Realmente me encantaría probar cosas en desarrollo y no tener que empujar todo a producción todo el tiempo.
Lo único que se me ocurre es tratar de usar shaHmac512 para encriptar y firmar su token, digiriéndolo con hexadecimal
Recuerdo tener que hacer esto para la autenticación de localhost
y para obtener acceso a tokens de acceso "de larga duración" para empresas de Facebook/facebook para desarrolladores
const accessToken = process.env.FACEBOOK_ACCESS_TOKEN ?? ""; const secretKey = process.env.FACEBOOK_SECRET ?? ""; function signHmacSha512(key: string, secret: string) { key = accessToken; secret = secretKey; const hmac = crypto.createHmac("sha512", key); const signed = hmac.update(Buffer.from(secret, "utf-8")).digest("hex"); return signed; } console.log(JSON.stringify(signHmacSha512(accessToken, secretKey), null, 2));no prometo que definitivamente funcionará, hice esto antes de que se convirtieran en meta en los últimos 9 meses
podría valer la pena revisar este hilo a través del mensaje de inicio de sesión de Facebook: "URL bloqueada: esta redirección falló porque la URI de redirección no está incluida en la lista blanca en la configuración de OAuth del cliente de la aplicación".