it-swarm.com.ru

Rails 5 ActionController :: InvalidAuthenticityToken error

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

Мой 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
25
HSD

Примечание : Хотя этот ответ имеет желаемый эффект, он снижает его общую безопасность. Приведенный ниже ответ от 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

Как это

11
Boltz0r

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

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

62
Alon Burg

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

3
fuzzygroup

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

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

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

protect_from_forgery with:: null_session

есть решение, в котором говорится "REPLACE" строка protect_from_forgery with:: exception, если она существует, к той, которую я цитировал выше

 [1]: Rails 4 токен подлинности

0
Vitaliy LiBrus