web-dev-qa-db-fra.com

L'origine de la demande n'est pas autorisée: http: // localhost: 3001 lors de l'utilisation de Rails5 et ActionCable

Avoir des problèmes de serveur avec une application dans Rails 5.0.0.beta2 en essayant d'utiliser ActionCable.

Utiliser localhost: 3000 fonctionne bien, car c’est la plupart des valeurs par défaut d’ActionCable. Mais si je tente d’exécuter le serveur Rails sur le port 3001, cela me donne Request Origin not allowed: http://localhost:3001

La documentation ActionCable mentionne l'utilisation de quelque chose comme ActionCable.server.config.allowed_request_origins = ['http://localhost:3001'] qui fonctionne pour moi si je le mets dans config.ru

Mais cela semble être un endroit vraiment étrange pour le dire. Je pense qu'il devrait pouvoir aller dans un fichier d'initialisation ou dans mon fichier de configuration d'environnement development.rb.

Pour prouver davantage que je devrait être autorisé à y entrer, le paramètre ActionCable.server.config.disable_request_forgery_protection = true permet d'ignorer la requête Origin, même lorsque je l'inclue dans development.rb.

Pourquoi ActionCable.server.config.disable_request_forgery_protection fonctionnerait-il dans development.rb, alors que ActionCable.server.config.allowed_request_origins ne fonctionnerait pas (mais fonctionne dans config.ru)?

Pas un problème urgent, car j'ai plusieurs options pour contourner le problème. Je veux juste savoir s'il me manque quelque chose d'évident sur la façon dont cela devrait fonctionner, selon moi.

31
daybreaker

Vous pouvez mettre Rails.application.config.action_cable.allowed_request_origins = ['http://localhost:3001'] dans votre développement.rb

Voir https://github.com/Rails/rails/tree/master/actioncable#allowed-request-origins pour plus d'informations

49
disastrous-charly

À partir de cette réponse , vous pouvez également ajouter le code suivant à config/environments/development.rb pour autoriser les demandes de http et https:

Rails.application.configure do
  # ...

  config.action_cable.allowed_request_origins = [%r{https?://\S+}]
end

config.action_cable.allowed_request_origins accepte un tableau de chaînes ou d'expressions régulières lorsque le documentation indique :

Action Cable acceptera uniquement les demandes d'origines spécifiées, lesquelles sont passés à la configuration du serveur sous forme de tableau. Les origines peuvent être des exemples de chaînes ou d'expressions régulières, contre lesquels une vérification de le match sera effectué.

Les expressions rationnelles répertoriées ci-dessous correspondront aux URL http et https de n'importe quel domaine, soyez donc prudent lorsque vous les utilisez. C'est juste une question de préférence lequel utiliser.

  • [%r{https?://\S+}] # extrait de cette réponse
  • [%r{http[s]?://\S+}]
  • [%r{http://*}, %r{https://*}]
  • [/http:\/\/*/, /https:\/\/*/]
1
Giovanni Benussi