Rails 5 (производство) и Devise - невозможно войти в Chrome или Safari, но можно войти в Firefox - PullRequest
0 голосов
/ 01 мая 2018

Проблема:

Я могу только зарегистрироваться и войти в свое приложение 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

1 Ответ

0 голосов
/ 01 мая 2018

По моему опыту, Chrome отказывается от перенаправления с HTTPS на HTTP, и похоже, что это происходит с вашей текущей конфигурацией.

Я бы попытался выяснить, можете ли вы определить, почему вы перенаправляете на панель управления по протоколу HTTP. Возможно, вам все еще придется выяснить, почему вы получаете предупреждение о том, что источник запроса не соответствует базовому URL запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...