Проблема:
Я могу только зарегистрироваться и войти в свое приложение rails (производство), используя браузер Firefox. При попытке использовать Safari или Chrome вход в систему с использованием существующей учетной записи не работает.
Фактически, при отправке формы он даже не выполняет проверку формы. При отправке в Firefox форма правильно определяет, что имя пользователя / пароль неверны, и уведомляет пользователя (через несколько флэш-сообщений). На хроме форма ничего не делает.
Фон
В настоящее время я размещаю приложение Rails 5 на Elastic Beanstalk. Мое персистентность - это отдельный RDS (PostGRESQL). Я настроил свою аутентификацию для использования гема devise и смог зарегистрироваться и войти в систему, чтобы нормально работать в процессе разработки.
Вот мой конфиг devise (config / initializers / devise.rb):
Devise.setup do |config|
config.secret_key = ENV['DEVISE_SECRET_KEY']
config.mailer_sender = ENV['EMAIL_TO_USER']
require 'devise/orm/active_record'
config.case_insensitive_keys = [:email]
config.strip_whitespace_keys = [:email]
config.http_authenticatable = false
config.skip_session_storage = [:http_auth]
config.stretches = Rails.env.test? ? 1 : 11
config.reconfirmable = false
config.expire_all_remember_me_on_sign_out = true
config.sign_out_via = :delete
end
Я пропустил настройки полосы / facebook.
Когда я отправил это в производство, я настроил EBS для https, что означало изменение моей конфигурации nginx следующим образом:
файлы:
/etc/nginx/conf.d/proxy.conf:
содержание: |
client_max_body_size 500M;
имя_сервера_hash_bucket_size 128;
upstream backend {
server unix:///var/run/puma/my_app.sock;
}
server {
listen 80;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
server_name www.mydomain.com;
if ($http_x_forwarded_proto = 'http') {
return 301 https://$server_name$request_uri;
}
large_client_header_buffers 8 32k;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_buffers 8 32k;
proxy_buffer_size 64k;
proxy_pass http://backend;
proxy_redirect off;
location /assets {
root /var/app/current/public;
}
# enables WS support
location /cable {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade "websocket";
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
Журналы
Здесь вещи немного трудно диагностировать. Журналы не содержали фатальных ошибок. Ниже приведены соответствующие части журналов, когда я пытался войти в Chrome:
I, [2018-05-01T00: 13: 57.126576 # 4167] ИНФОРМАЦИЯ -: [5ab87fb9-5dfd-410a-b9b5-9da405784583] Обработка с помощью Devise :: SessionsController # создать как HTML
I, [2018-05-01T00: 13: 57.126633 # 4167] ИНФОРМАЦИЯ -: [5ab87fb9-5dfd-410a-b9b5-9da405784583] Параметры: {"utf8" => "✓ "," authenticity_token "= > "DbVEjrNRtSIyaZEkdZ7gYlw / xlDG4Gt3fT2qihR2iuZzWjWLF7N2QFHjocvlHcok5sa5LcwzlDP1QTIRqgAN6g ==", "пользователь" => { "электронная почта" => "d***@example.com", "пароль" => "[FILTERED]", "Remember_Me" => "0" }, "commit" => "Войти"}
W, [2018-05-01T00: 13: 57.127260 # 4167] ПРЕДУПРЕЖДЕНИЕ -: [5ab87fb9-5dfd-410a-b9b5-9da405784583] Заголовок источника HTTP (https://www.gametime.hopewellhockey.com) не соответствует request.base_url (http://www.gametime.hopewellhockey.com)
D, [2018-05-01T00: 13: 57.132493 # 4167] DEBUG -: [5ab87fb9-5dfd-410a-b9b5-9da405784583] [1 м [36 м Пользовательская нагрузка (1,9 мс) [0 м [1 м [34 м ВЫБОР] пользователей ". * FROM" users "WHERE" users "." Email "= $ 1 ORDER BY" users "." Id "ASC LIMIT $ 2 [0m [[" email "," d***@example.com "], [ "LIMIT", 1]]
D, [2018-05-01T00: 13: 57.290705 # 4167] DEBUG -: [5ab87fb9-5dfd-410a-b9b5-9da405784583] [1 м [35 м (1,2 мс) [0 м [1 м [35 мBEGIN [0 м *] 1043 *
D, [2018-05-01T00: 13: 57.294562 # 4167] DEBUG -: [5ab87fb9-5dfd-410a-b9b5-9da405784583] [1 м [35mSQL (1,4 мс) [0 м [1 м [33mUPDATE «пользователи» ») SET "current_sign_in_at" = $ 1, "last_sign_in_at" = $ 2, "sign_in_count" = $ 3, updated_at "= $ 4 ГДЕ" пользователи "." Id "= $ 5 [0m [[" current_sign_in_at "," 2018-05-01 00: 13: 57.288765 "], [" last_sign_in_at "," 2018-04-30 23: 42: 09.037190 "], [" sign_in_count ", 18], [" updated_at "," 2018-05-01 00: 13: 57.291147 " ], ["id", 17]]
D, [2018-05-01T00: 13: 57.297196 # 4167] DEBUG -: [5ab87fb9-5dfd-410a-b9b5-9da405784583] [1 м [35 м (2,0 мс) [0 м [1 м [35 мCOMMIT [0 м *] 1047 *
I, [2018-05-01T00: 13: 57.301422 # 4167] ИНФОРМАЦИЯ -: [5ab87fb9-5dfd-410a-b9b5-9da405784583] Перенаправлено на http://www.gametime.hopewellhockey.com/dashboard
I, [2018-05-01T00: 13: 57.301571 # 4167] ИНФОРМАЦИЯ -: [5ab87fb9-5dfd-410a-b9b5-9da405784583] Завершено 302 Найдено за 175 мс (ActiveRecord: 6,6 мс)
I, [2018-05-01T00: 13: 57.341167 # 4167] ИНФОРМАЦИЯ -: [99d956dd-e326-4e7b-b261-956020699bd7] Запущен GET "/ панель инструментов" для 127.0.0.1 в 2018-05-01 00 : 13: 57 + 0000
I, [2018-05-01T00: 13: 57.343267 # 4167] ИНФОРМАЦИЯ -: [99d956dd-e326-4e7b-b261-956020699bd7] Обработка DashboardsController # index как HTML
I, [2018-05-01T00: 13: 57.344029 # 4167] ИНФОРМАЦИЯ -: [99d956dd-e326-4e7b-b261-956020699bd7] Выполнено 401 Не авторизовано в течение 1 мс (ActiveRecord: 0,0 мс)
I, [2018-05-01T00: 13: 57.382580 # 4167] ИНФОРМАЦИЯ -: [56191256-df92-4638-bd41-0df7b6e07722] Запущен GET "/ login" для 127.0.0.1 в 2018-05-01 00: 13:57 + 0000
I, [2018-05-01T00: 13: 57.383326 # 4167] ИНФОРМАЦИЯ -: [56191256-df92-4638-bd41-0df7b6e07722] Обработка с помощью Devise :: SessionsController # new as HTML
I, [2018-05-01T00: 13: 57.384641 # 4167] ИНФОРМАЦИЯ -: [56191256-df92-4638-bd41-0df7b6e07722] Отображение devise / session / new.html.erb в макетах / приложении
I, [2018-05-01T00: 13: 57.387677 # 4167] ИНФОРМАЦИЯ -: [56191256-df92-4638-bd41-0df7b6e07722] Предоставлено devise / session / new.html.erb в макетах / приложении (3.0 мс )
I, [2018-05-01T00: 13: 57.388956 # 4167] ИНФОРМАЦИЯ -: [56191256-df92-4638-bd41-0df7b6e07722] Предоставлено для общего доступа / _navbar.html.erb (0,8 мс)
I, [2018-05-01T00: 13: 57.389150 # 4167] ИНФОРМАЦИЯ -: [56191256-df92-4638-bd41-0df7b6e07722] Предоставлено: shared / _message.html.erb (0.1ms)
I, [2018-05-01T00: 13: 57.389622 # 4167] ИНФОРМАЦИЯ -: [56191256-df92-4638-bd41-0df7b6e07722] Предоставлено: shared / _footer.html.erb (0.3ms)
I, [2018-05-01T00: 13: 57.389794 # 4167] ИНФОРМАЦИЯ -: [56191256-df92-4638-bd41-0df7b6e07722] Выполнено 200 OK за 6 мс (Просмотры: 5,4 мс | ActiveRecord: 0,0 мс)
E, [2018-05-01T00: 13: 57.436191 # 4167] ОШИБКА -: Произошла ошибка WebSocket: сломанная труба
Несколько вещей, на которые следует обратить внимание - (1) кажется, что у веб-розетки есть проблемы Тем не менее, это также повлияло бы на мой вход в Firefox. Далее появляется предупреждение «Заголовок HTTP Origin (https://www.gametime.hopewellhockey.com) не соответствует request.base_url (http://www.gametime.hopewellhockey.com)"). Это говорит о том, что в конфигурации моего сервера nginx отсутствуют заголовки. Я нашел в сети некоторую документацию и попытался подражать ему (показано выше), но безрезультатно.
Заранее спасибо. Этот уже давно озадачил меня!
Редактировать: Подобная проблема найдена здесь: Devise не входит в Google Chrome
Это решение предлагает изменить строку в библиотеке гемов actionpack, что кажется мне плохой практикой.
Редактировать 2 - Кто-то указал, что Chrome делает исключение для перенаправления. Функция в приложении rails перенаправляет на панель пользователя после входа в систему. Мне кажется, это достаточно стандартная вещь.
class ApplicationController < ActionController::Base
protect_from_forgery prepend: true
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def after_sign_in_path_for(resource_or_scope)
dashboard_path
end
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:fullname])
devise_parameter_sanitizer.permit(:account_update, keys: [:fullname, :phone_number, :description, :player_age, :position])
end
end