Rails 5 ActionController:: Ошибка InvalidAuthenticityToken

У меня есть приложение rails, которое я планирую обновить до рельсов 5. Я использую devise (v4.2.0) вместе с rails (v5.0.0). Как было предложено в файле README.md, я попытался переместить защиту_from_forgery выше before_filter, но все же, когда я пытаюсь войти или обновить свою ошибку, я получаю сообщение об ошибке ActionController::InvalidAuthenticityToken

My Application Controller -

class ApplicationController < ActionController::Base
 protect_from_forgery with: :exception, prepend: true
 before_action :configure_permitted_parameters, if: :devise_controller?

  protected

   def configure_permitted_parameters
     devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
     devise_parameter_sanitizer.permit(:account_update, keys: [:name])
   end

end

И еще мой BugController

class BugsController < ApplicationController
  protect_from_forgery prepend: true, with: :exception
  before_action :authenticate_user!
  before_action :set_bug, only: [:show, :edit, :update]

    def update
      respond_to do |format|
      if @bug.update(bug_params)
        format.html { redirect_to @bug, notice: 'Bug was successfully updated.' }
        format.json { render :show, status: :ok, location: @bug }
     else
        format.html { render :edit }
        format.json { render json: @bug.errors, status: :unprocessable_entity }
     end
     end
   end

private
def bug_params
  params.require(:bug).permit(:product, :component, :title, :description, :status_id, :created_by_id, :assigned_to_id)
end


end

Ответы

Ответ 1

Примечание. Хотя этот ответ имеет желаемый эффект, он снижает его общую безопасность. Приведенный ниже ответ от Alon является более правильным и обеспечивает безопасность сайта.

class BugsController < ApplicationController
skip_before_filter :verify_authenticity_token
protect_from_forgery prepend: true, with: :exception
before_action :authenticate_user!
before_action :set_bug, only: [:show, :edit, :update]
end

Как это

Ответ 2

Как указано в Разработать документацию для Rails 5

Для Rails 5 обратите внимание, что protect_from_forgery больше не добавляется к цепочке before_action, поэтому, если вы установили authenticate_userдо protect_from_forgery, ваш запрос приведет к ошибке "Can not проверить подлинность CSRF-маркера". Чтобы решить эту проблему, измените порядок, в котором вы их называете, или используйте protect_from_forgery prepend: true.

Ответ 3

Недавно я ударил это довольно просто, и я обнаружил, что моя ошибка была недавно изменена моим доменным именем приложения, но я забыл обновить session_store.rb. Это может быть не проблема каждого, но она сообщит об этом как ошибку CSRF. Поэтому, пожалуйста, проверьте config/session_store.rb

Ответ 4

Я использовал что-то вроде этого, и это работает для меня.

class WelcomeController < ActionController::Base
    protect_from_forgery with: :exception
    before_action :authenticate_model!
end

Ответ 5

Это решение помогло мне. Я принял решение [отсюда] [1]. Как и для меня, неудачное название этой темы с использованием ключевых слов об ошибке, которых я не получил, поэтому я приведу в этой теме, потому что здесь точное имя ошибки. в моем случае я "добавил" следующую строку в файл application_controller.rb:

protect_from_forgery with:: null_session

есть решение, в котором говорится "ЗАМЕНИТЕ" строку protect_from_forgery with:: exception, если оно существует, к тому, которое я цитировал выше

[1]: Жетон аутентичности Rails 4