ActionController :: PostsController中的InvalidAuthenticityToken #create

时间:2018-06-04 10:52:51

标签: ruby-on-rails ruby ruby-on-rails-5.2

在我的rails博客应用中,我在尝试提交新帖子的表单时收到此错误消息:

ActionStroller :: PostsController中的InvalidAuthenticityToken #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%>

1 个答案:

答案 0 :(得分: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