Rails 3:如何防止用户通过键入 URL 来更改数据库?
我有以下链接:
link_to("Toggle", "/jobs/#{job.id}/toggle_is_money_paid", :remote => true)
它使用 Ajax 请求切换作业的 is_money_paid
字段:
def toggle_is_money_paid
job = Job.find(params[:id])
job.update_attributes(:is_money_paid => !job.is_money_paid)
render :nothing => true
end
# config/routes.rb
match "/jobs/:id/toggle_is_money_paid" => "jobs#toggle_is_money_paid"
但是,如果用户直接在浏览器中键入:
http://localhost:3001/jobs/200/toggle_is_money_paid
,它将切换 is_money_paid
字段工作#200。
我怎样才能防止这种情况,以便用户只能通过按链接来切换该字段。
I have the following link:
link_to("Toggle", "/jobs/#{job.id}/toggle_is_money_paid", :remote => true)
which toggles the is_money_paid
field of a job using an Ajax request:
def toggle_is_money_paid
job = Job.find(params[:id])
job.update_attributes(:is_money_paid => !job.is_money_paid)
render :nothing => true
end
# config/routes.rb
match "/jobs/:id/toggle_is_money_paid" => "jobs#toggle_is_money_paid"
However, if user types directly:
http://localhost:3001/jobs/200/toggle_is_money_paid
in the browser, it will toggle the is_money_paid
field of job #200.
How could I prevent this, such that users could toggle the field only by pressing the link.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以通过不使用
match
定义路由,而是使用非 get 的 HTTP 动词之一来防止这种情况发生。您很可能需要使用put
:然后您将
link_to
更改为:You could prevent this by not defining the route using
match
, but instead by using one of the HTTP verbs that isn't get. More than likely, you'll want to useput
:Then you'll change your
link_to
to this: