No se pudo cargar el recurso: el server respondió con un estado de 421 (Solicitud incorrecta)

Utilizo la nueva reference de CloudKit JS de Apple y el código de ejemplo para crear una aplicación CRUD simple. Antes de que pueda llegar a CRUD sin embargo, estoy siendo detenido por la authentication de Apple.

index.html <html> <body> <div id="apple-sign-in-button">Sign in <span id="username"></span> </div> <script> /* * Initialize the global objects we will need. */ if(typeof CKCatalog === 'undefined') { CKCatalog = {}; } if(typeof CKCatalog.tabs === 'undefined') { CKCatalog.tabs = { 'readme': [{}], 'not-found': [{}] }; } </script> <script src="js/init.js"></script> <script src="js/cloudkit-code-samples/authentication.js"></script> <script> window.addEventListener('cloudkitloaded',CKCatalog.init); </script> <script async src="https://cdn.apple-cloudkit.com/ck/1/cloudkit.js"> </script> </body> 

Incluyendo div id = "apple-sign-in-button" y span id = "username" se deshizo de todos los errores excepto:

No se pudo cargar el recurso: el server respondió con un estado de 421 (Solicitud incorrecta).

Cualquier mención de este error en cualquier otro lugar generalmente está vinculada a SMTP o FTP. ¿Alguna idea de lo que está pasando?

La biblioteca CloudKit.js es una envoltura alnetworkingedor de los web services de CloudKit, y su documentation establece que un HTTP 421 ocurre cuando se llamó a una request que requirió authentication, pero el usuario no inició session.

Esto se espera, ya que es probable que su aplicación deba determinar si un usuario ha iniciado session y, de lo contrario, mostrar el button Iniciar session adecuado. La sección de ejemplo del Catálogo de CloudKit sobre authentication muestra cómo puede configurar esto llamando a container.setUpAuth() , que verificará si hay un usuario y mostrará el button Iniciar session si no se detecta ninguno. Es posible que esto esté sucediendo en su código init.js, pero sin verlo no puedo estar seguro.

Veo que tienes el apple-sign-in-button en tu página. Si está llamando al método setUpAuth , debería ver el button Iniciar session dentro de él.

Una vez que un usuario hace clic en ese button y se registra, puede volver a emitir la request original que estaba recibiendo un 421 y debería get un 200 válido.

No olvide que si desea mantener la session de CloudKit del usuario, puede usar auth: { persist: true } cuando inicializa su contenedor (consulte los documentos de CloudKit.js para get más información).

También querrá asegurarse de haber creado un token de API en el Panel de control de CloudKit para su contenedor. Este es el token que usa al inicializar su contenedor. Consulte el video de WWDC 2015 sobre CloudKit JS y los web services para ver una demostración de esto.

¡Espero que eso ayude!

ACTUALIZAR:

Al probar su aplicación web, asegúrese de haber configurado su token de la API (utilizando el panel de control de CloudKit) para permitir el dominio con el que está probando (por ejemplo, localhost). Este fue originalmente el problema de Sam, pero localhost ahora es un dominio compatible con los tokens de API en el entorno de desarrollo.

Copiar el comentario de Dave Browning a su respuesta como una respuesta completa ya que parece ser el problema para mí:

El host local es el problema. localhost no se admite actualmente como un dominio válido con los web services de CloudKit, pero también es un error conocido. Si utiliza una herramienta para asignar un server local a un dominio falso (por ejemplo, foo.com), entonces debería resolver su problema por ahora