在我的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%>
答案 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