Формы Rails, ведущие к предупреждению о смешанном содержимом

В моем приложении Rails я использую как родной метод Rails form_tag, так и метод simple_form_for, предоставляемый rubygem simple_form.

Оба они приводят к следующему предупреждению в консоли Chrome:

Смешанный контент: страница 'https://example.com' была загружена через безопасное соединение, но содержит форму который нацелен на небезопасную конечную точку 'http://example.com. Эта конечная точка должна быть доступна через безопасное соединение.

И действительно, визуализированные HTML-формы используют протокол http для атрибута action.

В чем причина этого? Все другие мои URL-адреса используют протокол https.


person heroxav    schedule 08.10.2017    source источник
comment
В вашей форме указан протокол http? Обычно он имеет только относительный путь, не так ли? Как вы создавали форму?   -  person EJAg    schedule 09.10.2017
comment
@EJ2015 EJ2015 Я использовал simple_form_for(@object) / form_tag(some_url) -> без относительных путей   -  person heroxav    schedule 09.10.2017


Ответы (1)


В вашей среде настроен неверный протокол.

Ваш сервер работает на HTTPS, и форма создает URL-адрес HTTP.

Вам нужно сообщить своим помощникам по URL, чтобы они создавали URL-адреса с тем же протоколом, что и ваш сервер, работающий в вашей среде.

Разработка должна выполняться по протоколу HTTP, постановка должна выполняться по протоколу HTTPS, а рабочая среда также должна быть по протоколу HTTPS.

Есть разные способы, как это сделать. Лучше всего установить протокол в файле конфигурации вашей среды. Итак, поместите эту строку:

Rails.application.routes.default_url_options[:protocol] = 'https'

в файл конфигурации вашей среды, такой как production.rb и staging.rb.

Другой подход заключается в установке протокола по умолчанию для каждого действия контроллера. Дополнительную информацию см. здесь.

Если вы используете почтовую программу, также проверьте настройки протокола почтовой программы. Как описано здесь.

person vitulicny    schedule 08.10.2017