Drupal 8 possède un service Web RESTful intégré au noyau et depuis la version 8.2, nous n'avons pas besoin de module cors .
Maintenant, pour utiliser les services, nous activons et configurons simplement le fichier default.service.yml comme spécifié ici
Cependant, je n'ai pas pu configurer cette configuration pour autoriser l'accès au service Web sur un autre domaine.
Ma configuration actuelle de service.yml pour les cors est la suivante:
cors.config:
enabled: true
# Specify allowed headers, like 'x-allowed-header'.
allowedHeaders: ['x-csrf-token,authorization,content-type,accept,origin,x-requested-with']
# Specify allowed request methods, specify ['*'] to allow all possible ones.
allowedMethods: ['POST, GET, OPTIONS, DELETE, PUT']
# Configure requests allowed from specific origins.
allowedOrigins: ['*']
# Sets the Access-Control-Expose-Headers header.
exposedHeaders: false
# Sets the Access-Control-Max-Age header.
maxAge: 1000
# Sets the Access-Control-Allow-Credentials header.
supportsCredentials: false
J'ai googlé pour trouver une configuration plus détaillée à ce sujet, mais je n'ai pas pu en trouver une.
Je crée cela pour le développement de tests dans deux domaines différents.
Utilisation de l'environnement de développement Pantheon pour les services Web et du domaine .dev localhost personnalisé pour la consommation de ces services.
L'accès au service fonctionne correctement à l'aide de l'extension chrome CORS.
la source
Réponses:
J'ai rencontré cela assez récemment sur Pantheon, et j'espère que cela aide si vous ne l'avez pas déjà résolu.
Quelques points à noter ...
En ce qui concerne l'emplacement du fichier sur Pantheon, assurez-vous que votre fichier service.yml se trouve dans / sites / default vs just / sites. J'avais à tort l'impression que cela fonctionnerait des deux côtés. Cela ne fonctionnera que si dans le répertoire / sites / default.
Remarquez la liste séparée par des virgules de allowedHeaders chacun dans leur propre ensemble de guillemets. À l'origine, j'avais une seule chaîne comme vous le faites dans votre exemple ci-dessus, et elle a échoué un nombre incalculable de fois avant de saisir la différence subtile. Je suis à peu près certain que allowMethods fonctionne de la même manière si vous souhaitez spécifiquement répertorier vos méthodes.
Veuillez également noter que même si mon extrait de code fonctionnera bien pour le développement contre un bac à sable Pantheon, vous voudrez probablement verrouiller les choses un peu plus avant de commencer la production. Avec Pantheon offrant HTTPS, vous voudrez également vous assurer de l'utiliser si vous allez transmettre des informations via des en-têtes. J'espère que cela vous aidera si vous rencontrez toujours des problèmes ou quelqu'un d'autre qui est tombé dessus en cours de route.
la source
Rechercher: ... / sites / default / default.services.yml
Faites une copie et renommez-la en:
... / sites / default / services.yml
Trouvez cette partie du code: cors.config: enabled: false
et remplacez par ce qui suit - cors.config: enabled: true
Videz le cache.
la source
Le paramètre suivant fonctionne pour moi.
la source
exposeHeaders: true n'est pas valide et provoquera Avertissement: implode (): Arguments non valides passés dans Asm89 \ Stack \ CorsService-> addActualRequestHeaders () (ligne 94 de / vendor / asm89 / stack-cors / src / Asm89 / Stack / CorsService. php) # 0 /web/core/includes/bootstrap.inc(584) Il doit être faux ou un tableau avec des en-têtes autorisés à exposer voir https://developer.mozilla.org/en-US/docs/Web/ HTTP / En-têtes / Access-Control-Expose-Headers
la source