Ошибка входа пользователя в Rails: невозможно проверить подлинность токена CSRF - PullRequest
0 голосов
/ 21 сентября 2018

У меня проблема с входом пользователя в мое приложение rails в рабочей среде.Всякий раз, когда пользователь пытается войти в систему, появляется следующее сообщение об ошибке:

enter image description here Хотя тот же контроллер приложений:

Application Controller:
    class ApplicationController < ActionController::Base
      protect_from_forgery with: :exception
    end

При проверке я заметил ошибку, связанную с CSRFсообщения в файле production.log.Эта проблема встречается в производственной среде (единорог) и не существует в среде разработки (rails -s).

Шаблон макета:

<html>
<head>
  <title>My Site</title>
  <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
  <%= csrf_meta_tags %>
</head>

W, [2018-09-21T13:55:13.032519 #20667]  WARN -- : [c1cb8958-e963-43ba-8bdd-d5f38eb3394f] Can't verify CSRF token authenticity.
F, [2018-09-21T13:55:13.033892 #20667] FATAL -- : [c1cb8958-e963-43ba-8bdd-d5f38eb3394f]   
F, [2018-09-21T13:55:13.034023 #20667] FATAL -- : [c1cb8958-e963-43ba-8bdd-d5f38eb3394f] ActionController::InvalidAuthenticityToken (ActionControl
ler::InvalidAuthenticityToken):
F, [2018-09-21T13:55:13.034040 #20667] FATAL -- : [c1cb8958-e963-43ba-8bdd-d5f38eb3394f]   
F, [2018-09-21T13:55:13.034063 #20667] FATAL -- : [c1cb8958-e963-43ba-8bdd-d5f38eb3394f] actionpack (5.0.7) lib/action_controller/metal/request_fo
rgery_protection.rb:195:in `handle_unverified_request'
[c1cb8958-e963-43ba-8bdd-d5f38eb3394f] actionpack (5.0.7) lib/action_controller/metal/request_forgery_protection.rb:223:in `handle_unverified_requ
est'
[c1cb8958-e963-43ba-8bdd-d5f38eb3394f] devise (4.5.0) lib/devise/controllers/helpers.rb:255:in `handle_unverified_request'
[c1cb8958-e963-43ba-8bdd-d5f38eb3394f] actionpack (5.0.7) lib/action_controller/metal/request_forgery_protection.rb:218:in `verify_authenticity_to
ken'

Любая идея, что может быть корнемпричина?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Возможно, это не та проблема, с которой вы столкнулись, поскольку ваш protect_from_forgery находится наверху ApplicationController, но может быть полезен для других:

Я уже звонил на devise_parameter_sanitizer ранеедействие if: devise_controller? выше -линии protect_from_forgery, из-за которой Devise сломался после обновления рельсов до 5.2.Так как Rails 5.2 делает protect_from_forgery по умолчанию (если вы используете настройки 5.2 по умолчанию), я смог удалить эту строку после установки config.load_defaults 5.2.

0 голосов
/ 21 сентября 2018

Проверьте наличие secret_key_base в config\secrets.yml.

Убедитесь, что у вас установлен ENV["SECRET_KEY_BASE"] ($SECRET_KEY_BASE) в производстве.

# csrf_meta_tags зависит от secret_key_base проверки токена.

Убедитесь, что у вас включено снятие отпечатков активов и вы не кэшируете старую страницу после выпуска.

Проверьтеconfig.assets.digest = true для производства.

Поведение снятия отпечатков контролируется параметром инициализации config.assets.digest (по умолчанию true для производства и false для всего остального).

Возможно, оно отсутствует,поэтому полагается на значения по умолчанию, поэтому проверьте, что $RAILS_ENV = production.

...