Я использую "Turbolinks 5.1.0".
файл: Gemfile
gem 'turbolinks', '~> 5.1'
файл: заголовок макета приложения
<%= javascript_include_tag "application", nonce: true %>
файл: config / initializers / content_security_policy.rb
Rails.application.config.content_security_policy_nonce_generator = -> request {SecureRandom.base64 (16)}
Ошибка консоли Google Chrome
VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
[Только отчет] Отказ от выполнения встроенного сценария, поскольку он нарушает следующую директиву политики безопасности содержимого: «script-src 'self' https: 'unsafe-inline' 'nonce-UiVx2CiP0HHN9jOOSEG43g =='".Обратите внимание, что «unsafe-inline» игнорируется, если в списке источников присутствует хеш или одноразовое значение.
n.assignNewBody @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
n.replaceBody @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
(anonymous) @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
t.renderView @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
n.render @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
t.render @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
e.renderSnapshot @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
e.render @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
t.render @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
(anonymous) @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
(anonymous) @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
Для решения этой проблемы, кажется, у меня есть дваРешения, перечисленные ниже
1) Используйте data-turbolinks-track: reload
<%= javascript_include_tag "application", 'data-turbolinks-track': :reload, nonce: true %>
ИЛИ
2) Повторно используйте тот же одноразовый номер, используяСеанс-хранилище для запросов TurboLink, это правильный способ решения этой проблемы?
Rails.application.config.content_security_policy_nonce_generator = -> request do
# use the same csp nonce for turbolinks requests
if request.env["HTTP_TURBOLINKS_REFERRER"].present? && request.session["mykey"].present?
request.session["mykey"]
else
request.session["mykey"] = SecureRandom.base64(16)
end
end
Пожалуйста, предложите правильное решение здесь!