`
qiezi
  • 浏览: 497885 次
  • 性别: 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
分享到:
评论

相关推荐

    Rails项目源代码

    这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...

    rails 项目起步示例

    本示例"rails项目起步示例"是一个购物系统,非常适合初学者入门学习。 在Rails项目中,我们首先需要了解的是项目的目录结构。一个标准的Rails应用会包含以下关键部分: 1. **app**:应用程序的核心,包括模型...

    Ruby-SimpleForm轻松处理Rails表单

    在Ruby on Rails框架中,构建表单是一项常见的任务,而Simple Form gem就是为了简化这一过程而设计的。Simple Form是一款强大的表单构建器,它提供了一种简洁、直观的方式来创建复杂的表单,使得开发者能更专注于...

    Ruby on Rails:Rails中的表单处理.docx

    Ruby on Rails:Rails中的表单处理.docx

    rails ajax提交文件或图片

    在Rails中,`form_for`辅助方法可以帮助我们创建一个表单,但为了支持AJAX提交,我们需要将其与`remote: true`选项一起使用: ```html , url: uploads_path, html: { multipart: true }, remote: true do |f| %&gt; ...

    rails的经典学习项目

    描述中重复提到"ruby on rails打包的程序",这意味着提供的压缩包可能包含了一个完整的、已经打包的Rails应用。这可能是一个已经运行起来的项目,或者是一个教学示例,用于演示如何组织代码、设置路由、处理用户输入...

    重构你的Rails程式码

    ### 重构你的Rails程式码 在进行Rails版本升级时,重构代码是一个绝佳的机会。本文将深入探讨为何这是个好时机来进行重构,并提供一系列实用的方法帮助您优化代码。...希望这篇文章能为您的Rails项目带来积极的影响。

    Ruby-开箱即用的Rails项目模板

    总的来说,这个"Ruby-开箱即用的Rails项目模板"是一个预配置的Rails开发环境,集成了修改过的Swagger Docs以优化API文档生成,并且强调减少重复代码和提高业务逻辑的专注度。通过使用这个模板,开发者可以快速启动新...

    windows下配置netbeans开发rails

    5. **Gemfile和bundle安装**:在Rails项目的根目录下,你会看到一个`Gemfile`,这里列出了项目所需的所有Gem(Ruby的库)。运行`bundle install`命令,它会根据Gemfile中的依赖关系安装所有必要的库和框架。 6. **...

    使用Aptana+Rails开发Rails Web应用(中文)

    Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。本教程将详细介绍如何使用Aptana与Rails结合,创建一个功能完备的Web应用程序。 首先,我们需要安装Aptana...

    rails2-sample

    这一章节将讨论Rails中的安全特性,如防止SQL注入、跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等。通过实施这些防护措施,可以大大降低应用遭受攻击的风险。 #### 9. Advanced Topics(高级主题) 这一部分将覆盖...

    Redmine 搭建 Ruby_Ruby_on_Rails 项目管理系统

    Rails 的设计理念强调“约定优于配置”(CoC)和“不要重复自己”(DRY),使得开发者能够快速高效地构建复杂的应用程序。 #### 二、搭建环境与资源准备 1. **操作系统环境**:Redmine 可以在多种 Linux 发行版上...

    judge:Rails的客户端表单验证

    通过将许多ActiveModel::Validation功能移植到JavaScript,Judge可以轻松地对Rails进行客户端表单验证。 最常见的验证通过存储在HTML5数据属性中的JSON字符串进行,并且仅在客户端执行。 无论您在何处,Judge都为...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **学习路径**:继续深入学习Rails的高级特性,如Active Record模式、表单构建器等。 - **社区资源**:加入Rails官方论坛、Stack Overflow等社区获取帮助和支持。 #### 十一、文档编写技巧 - **重要性**:良好的...

    Rails101_by_rails4.0

    此外,书中还介绍了一些Rails中的高级概念,如Strong Parameters(强参数),它在Rails 4.0版本中引入,用于解决之前版本中的参数篡改问题,从而帮助开发者安全地处理外部提交的数据。 通过一系列的教学内容,包括...

    rails指南 中文版

    Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,强调“约定优于配置”(Conventions over Configuration)和“Don't Repeat Yourself”(DRY,不要...

    基于Ruby语言的Ruby on Rails项目及其代码方案

    ### 基于Ruby语言的Ruby on Rails项目及其代码方案 #### 一、项目概述 本项目基于Ruby语言,利用Ruby on Rails(简称Rails)框架构建。Ruby on Rails是一款使用Ruby语言开发的应用程序框架,其核心是MVC(Model-...

    Rails 101S

    - **创建项目**:使用`rails new`命令创建一个新的Rails项目。 - **配置Git**:设置版本控制系统,确保代码变更能够被追踪记录。 - **使用Bootstrap进行前端设计**:介绍如何使用Bootstrap框架来快速搭建美观的...

    jquery-ui+jquery-ui-rails

    当我们将jQuery UI引入Rails项目时,通常会使用`jquery-ui-rails` gem,这是一个将jQuery UI与Rails集成的便捷工具。在这个案例中,我们看到`jquery-ui-rails-4.2.1.gem`,这是该gem的一个特定版本。这个gem负责将...

Global site tag (gtag.js) - Google Analytics