`
qiezi
  • 浏览: 492343 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Rails项目防止表单重复提交

    博客分类:
  • Ruby
阅读更多
类似struts的token,使用session保存token,调用check_token后就把session里的token清掉,所以不能重复调用。

因为有些界面可能会有多个表单,这些表单最好共用同一个token,不然提交过来的token很难验证,所以这里做了处理,不会多次生成。

module ApplicationHelper
  def token_field
    hidden_field_tag(:__token__, (@__token__ ||= (session[:__token__] = 
        Digest::SHA1.hexdigest((Time.now.to_i + rand(0xffffff)).to_s)[0..39])))
  end
end


class ApplicationController < ActionController::Base
  def check_token
    if session[:__token__] == params[:__token__]
      session[:__token__] = nil
      session.update
      return true
    end
    false
  end
end


<%= form_tag(:controller => "test", :action => "test") %>
  <%= token_field %>
  <%= submit_tag "提交" %>
</form>


检查token:
#方法1:
class TestController < ApplicationController
  def test
    unless check_token
      return redirect_to("/")
    end
    #...
  end
end

#方法2:
class TestController < ApplicationController
  before_filter :check_token, : only => ["test"], : redirect_to => "/"

  def test
    #...
  end
end
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics