ActionController :: InvalidAuthenticityToken в PostsController # create

в моем приложении блога rails я получаю это сообщение об ошибке при попытке отправить форму для нового сообщения:

ActionController :: InvalidAuthenticityToken в PostsController # create ActionController :: InvalidAuthenticityToken Извлеченный источник (около строки № 211):

      def handle_unverified_request
        raise ActionController::InvalidAuthenticityToken
      end
    end
  end

это мой файл posts_controller.rb:

class PostsController < ApplicationController
  def index
  end

  def new
  end

  def create
    @post=Post.new(post_params)
    @post.save

    redirect_to @post
  end

  def show
    @show=Post.find(params[:id])
  end

  private
    def post_params
      params.require(:post).permit(:title,:body)
    end
end

это мой код формы:

<font color = "#BD004B"><h1>New Post<br></h1></font>

<%=form_for :post, url: posts_path do |f|%>
  <p>
  <%=f.label :title%><br>
  <%=f.text_field :title%>
  </p>
  <p>
  <%=f.label :body%><br>
  <%=f.text_area :body%>
  </p>
  <p>
    <%=f.submit%>
  </p>
<%end%>

Вы можете поделиться кодом своей формы?

D1ceWard 04.06.2018 12:58

Это может быть либо отсутствующая часть представления, либо отсутствующий метод обратного вызова в контроллере, который пропускает действие проверки подлинности для запросов на публикацию / размещение / удаление. Так что, как просил @ D1ceWard, поделитесь кодом просмотра, и я также хотел бы увидеть код application_controller.rb.

radoAngelov 04.06.2018 13:29

@ D1ceWard я разместил код формы

Jack Carter 04.06.2018 13:39

@radoAngelov я разместил код формы

Jack Carter 04.06.2018 13:39

Это не form, это страница шоу. выложить содержимое posts/_form

Deepak Mahakale 04.06.2018 13:44

Но вам нужна форма «Отправить», которая создает новое сообщение. Код общего просмотра не имеет значения :(

radoAngelov 04.06.2018 13:49

@radoAngelov извините, я вставил не тот файл, не задумываясь, добавил код формы сейчас

Jack Carter 04.06.2018 13:50

Проверьте, есть ли у вас <%= csrf_meta_tags %> в основном макете приложения. Если этого нет в основном макете, он понадобится вам на любой странице, на которой вы хотите разместить токен CSRF, например, в форме POST.

radoAngelov 04.06.2018 13:53

у меня это в моем файле application.html.erb

Jack Carter 04.06.2018 13:57

Хорошо, попробуйте добавить skip_before_action :verify_authenticity_token в ваш файл application_controller.rb.

radoAngelov 04.06.2018 13:59

Взгляните на stackoverflow.com/questions/3364492/…

ldeld 04.06.2018 14:07

@ldeld какой раздел поста?

Jack Carter 04.06.2018 14:10

@radoAngelov, который остановил ошибку, но теперь я получаю еще одну: undefined method 'title' for nil:NilClass из моего файла шоу, выделенная строка - <%[email protected]%>

Jack Carter 04.06.2018 14:21

@radoAngelov skip_before_action :verify_authenticity_token пропустить проверку токена, которая является проблемой безопасности и, кстати, не решением, нам нужна дополнительная информация, такая как все содержимое new / _form, маршрутизация, связанная с версией post и rails, потому что на данный момент все выглядит штрафом

D1ceWard 04.06.2018 14:45
undefined method 'title' for nil:NilClass это потому, что ваша переменная экземпляра в вашем контроллере называется @show, а не @post
D1ceWard 04.06.2018 14:49

@ D1ceWard какая еще информация вам нужна

Jack Carter 04.06.2018 14:51

Прочтите выше, все содержимое new / _form, маршрутизация, связанная с версией post и rails.

D1ceWard 04.06.2018 14:52
@D1ceWard должен ли я заменить @show на @post или <%[email protected]%> на <%[email protected]%>
Jack Carter 04.06.2018 14:56

@radoAngelov <%= csrf_meta_tags %> используются только для запросов ajax remote: true. Обычно метатеги отправляются через скрытый ввод. Можете ли вы привести пример параметров запуска tail -f log/development.log

max 04.06.2018 16:43

Но я бы подумал, действительно ли вам стоит попробовать создать отдельную ветку в git или развернуть новое приложение rails и запустить генератор скаффолда, чтобы получить представление о том, как должен выглядеть контроллер rails crud. rails g scaffold post title body:text

max 04.06.2018 16:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
20
321
1

Ответы 1

Как отмечали другие, пропуск verify_authenticity_token не является вариантом и открывает большие дыры в безопасности вашего приложения.

Исключение обычно возникает в двух случаях: ваша сессия закончилась, наша форма отправлена ​​через ajax без csrf_meta_tags.

Правильное решение проблемы - спасти исключение и сбросить сеанс пользователя следующим образом:

rescue_from ActionController::InvalidAuthenticityToken do
  logger.info "Compromised session found."
  reset_session
  flash[:error] = "You're session has expired"
  redirect_to root_path # or new_user_session_path
end

Я удалил его из своего файла application_controller.rb, и функциональность моего приложения не изменилась, так что я оставлю его

Jack Carter 04.06.2018 19:09

Другие вопросы по теме