У меня есть приложение Rails 6, и я хочу, чтобы зарегистрированные и гостевые пользователи могли комментировать блог. Для этого в клиенте я делаю почтовый запрос
let formData = new FormData();
formData.append("comment", comment);
fetch(`http://localhost:3000/blogs/${blogId}/comments`, {
method: "POST",
body: formData,
})
.then((response) => {
console.log(response);
})
.catch((err) => console.log(err));
Затем на сервере
В моей comments_controller.rb
def create
if current_user.is_a?(GuestUser)
@comment = current_user.comment.new(blog_id: params[:blog_id], guest_user: params[:guest_user])
else
@comment = current_user.comments.new(blog_id: params[:blog_id])
end
...
end
гостевой пользовательской модели
class GuestUser < User
attr_accessor :name, :first_name, :last_name, :email
end
И я получаю ActionController::InvalidAuthenticityToken
в контроллере комментариев.
Если я добавляю config.action_controller.default_protect_from_forgery = false
в config/application.rb
, он работает как для пользователей, так и для гостей, но не так делает меня уязвимым?
Как я могу решить эту проблему, не задавая default_protect_from_forgery = false
?