如何解决来自Rails应用程序中相同IP的POST请求的两倍或三倍
我们有一个包含几个数据的表单。我们的Rails 4应用程序具有由jQuery插件表单验证器提供的前端验证。
在某些特定设备上,javascript不起作用,整个验证崩溃。我知道最佳做法是也要进行后端验证,但这不是发布的主题。
单击表单上的create
按钮会触发几个(奇怪的事件,需要进一步调查) POST请求,该请求已在生产日志中验证,并进入Rails def create
@user_token = Token.find_by(token: params[:user_token])
if @user_token.blank?
redirect_to :back
return
end
user_form = CreateUserForm.new(attributes: user_params)
@user_token.delete
if user_form.save
redirect_to form_thank_you_path
end
end
操作。创建操作如下所示:
CreateUserForm
@user_token
保存方法在事务中对用户模型进行所有分配。
@user_token
基于:user_token的hidden_field_tag的值,并且每个表单仅应使用一次,因此,即使同一表单被提交了超过1次,也应该只创建一条记录,因为user_token
被删除了。在数据库中不应在创建方法@user_token
中发现第二个POST请求,并且不应应用第二个POST创建记录,而应使用redirect_to:back。
不幸的是,有时我们甚至观察到三个重复,一个接一个地创建(日志记录了POST请求,间隔3秒发送)。 hand
不会阻止我们使用相同的表单创建重复记录吗?
另外,真正有趣的是,在日志中,我注意到一个create操作尚未完成,但是第二个create操作被触发(基于已启动的数据库查询)。是某些请求排队问题还是记录失败?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。