`

rails实现验证码

阅读更多
    网上其实有一大堆这样的资料了,我再写也没多大价值,谈下几个注意点吧。
1.在windows上安装Rmagic,如果你是通过gem安装的,
<!---->require 'Rmagic'
要修改为:
<!---->require 'rubygems'
require 
'Rmagick'
才能正确引入。

2.网上那个例子,画布是使用Rmagic内置的图像格式,Rmagic内置的图像格式还有:

gradient*

梯度,比如gradient:red-blue

granite

花岗石,比如: "granite:".

logo

logo型的图像. 如: "logo:"后面会多显示一个五角星^_^

netscape

非常漂亮的彩条。如: "netscape:"

null*

空白 使用方式: "null:"

rose


玫瑰 使用方式 : "rose:"

xc*

设置一个背景色,比如"xc:green"


一个修改的例子,在rails的models下存为noisy_image.rb,在Controller就可以这样调用NoisyImage.new(6) :


require 'rubygems'
require 
'Rmagick'
class NoisyImage
  include Magick
  attr_reader :code, :code_image
  Jiggle 
= 15
  Wobble 
= 15
  
  
def initialize(len)
    chars 
= ('a'..'z').to_a - ['a','e','i','o','u']
    code_array
=[]
    
1.upto(len) {code_array << chars[rand(chars.length)]}
    granite 
= Magick::ImageList.new('xc:#EDF7E7')
    canvas 
= Magick::ImageList.new
    canvas.new_image(
32*len, 50, Magick::TextureFill.new(granite))
    text 
= Magick::Draw.new
    text.font_family 
= 'times'
    text.pointsize 
= 40
    cur 
= 10
    
    code_array.each{
|c|
      rand(
10> 5 ? rot=rand(Wobble):rot= -rand(Wobble)
      rand(
10> 5 ? weight = NormalWeight : weight = BoldWeight
      text.annotate(canvas,0,0,cur,
30+rand(Jiggle),c){
        self.rotation
=rot
        self.font_weight 
= weight
        self.fill 
= 'green'
      }
      cur 
+= 30
    }
    @code 
= code_array.to_s
    @code_image 
= canvas.to_blob{
      self.format
="JPG" 
    }
  end
  
end

3.与rails应用的结合,和一般的验证码原理一样,将产生的随机数存储在session或者request范围内,提交的时候进行比较验证即可。比如产生图片的时候将随机字母存储在session[:code]中:

<!----> session[:noisy_image] = NoisyImage.new(6)

 session[:code] = session[:noisy_image].code

验证的时候,比较提交的type_code与session[:code]即可,为了安全性考虑,最好还是不考虑使用客户端验证。

<!----> unless session[:code]==params[:type_code]
      flash[:notice]
='验证码填写错误,请重新注册,谢谢!'
      
return redirect_to :action=>:new  
 end

在页面显示图片,类似servlet一样直接调用Controller的action:

<!----> def code_image
    image 
= session[:noisy_image].code_image
    send_data image, :type 
=> 'image/jpeg', :disposition => 'inline'
  end

<img height='30' src="/test/code_image">






dennis 2007-04-09 17:13 发表评论
分享到:
评论

相关推荐

    rails实现验证码实例

    在这个实例中,我们将探讨如何在Rails应用中实现验证码功能。 首先,我们需要一个库来帮助我们生成和验证随机的图像验证码。一个常用的库是`kaptcha`,它提供了创建图片验证码的功能,并且可以自定义样式以适应应用...

    Rails实现的简历系统

    在Rails中,可以使用第三方库如`gem 'recaptcha'`来集成谷歌的reCAPTCHA服务,或者创建自定义的验证码生成器,通过随机字符或图片实现。 4. **数据查询**:Rails的ActiveRecord层提供了强大的查询接口,如`where`、...

    easy_captcha:验证码插件(Rails)

    基于rmagick的rails 3的简单验证码实现 经过Rails 3.2.8的测试 安装 添加到Gemfile gem 'easy_captcha' gem 'rmagick' 对于Java,您可以使用 gem 'rmagick4j' 捆绑执行后 rails g easy_captcha: install 配置 ...

    rails登陆注册

    Rails提供了许多内置工具和库,使得这个过程相对简单高效。在这个"rails登陆注册"的主题中,我们将探讨如何在Rails应用中实现用户认证系统。 首先,我们需要一个用户模型(User Model)来存储用户的个人信息和认证...

    Go-Packagecaptcha为Macaron提供验证码服务

    在`captcha-master`这个压缩包中,可能包含了`Package captcha`的源码,你可以深入研究其内部实现,了解验证码生成和验证的具体逻辑,这对于提升Go语言的Web开发技能和理解验证码工作原理非常有帮助。此外,这个包还...

    twilio:Ruby on Rails 与 Twilio API

    - **发送文本消息**:通过 Twilio API,开发者可以实现向指定电话号码发送文本消息的功能,这在许多应用场景中都很有用,如通知服务、验证码发送等。 - **修复字段验证**:描述中提到的问题可能涉及到输入验证,意味...

    ror-codelit-landing:基于 ruby​​ on rails 的登陆页面

    【ror-codelit-landing:基于 Ruby on Rails 的登陆页面】是一个使用 Ruby on ...通过分析项目源码,我们可以深入理解 Ruby on Rails 如何与 JavaScript 配合构建现代 Web 应用,以及如何设计和实现一个安全的登录系统。

    毕业设计&课设--毕业设计之鲜花销售网站的设计与实现.zip

    - 后端语言:如PHP、Python(Django或Flask)、Java(Spring Boot)或Ruby(Rails)等,实现业务逻辑处理和数据操作。 - RESTful API设计:确保前端与后端之间的通信规范,便于数据交换和功能调用。 3. 数据库...

    网页中用户注册

    - 发送短信验证码:与邮箱验证类似,通过发送短信验证码到用户手机,完成身份验证。 - SMS服务商:可能需要集成第三方短信服务商API,如阿里云、腾讯云等。 5. **重复注册防护**: - 用户名唯一性检查:在用户...

    Laravel开发-laravel

    Laravel由Taylor Otwell创建,其设计灵感来源于Ruby on Rails。Laravel的核心特性包括艺术化的路由、简单的数据库迁移系统、强大的Eloquent ORM(对象关系映射)、方便的单元测试以及一套全面的工具,如Artisan...

    sms_confirmable:设计通过短信验证电话号码的模块

    "sms_confirmable"模块就是针对这一需求而设计的,它专注于通过短信验证码来验证用户的电话号码。这个模块可以与Devise这样的身份认证框架结合使用,提供额外的安全层,增强用户账户的安全性。 Devise是一个灵活的...

    google_safe_browsing:Google Safe Browsing V2 API的Ruby实现

    消息验证码(可选;默认情况下为启用) ##安装 安装宝石 gem install google_safe_browsing 或将其添加到您的Gemfile #Gemfile ... gem 'google_safe_browsing' 然后,生成迁移并运行它 $ rails generate ...

    网上考试系统

    网上考试系统的开发通常采用Web开发框架,如Spring Boot、Django或Ruby on Rails,结合前端框架如React、Vue或Angular来构建用户界面。数据库管理系统可能选用MySQL、PostgreSQL或MongoDB等。验证码技术可以使用第三...

    luntan-.zip_luntan _论坛

    8. **反垃圾邮件和滥用防护**:防止恶意注册和发帖是论坛运营的重要部分,通常会采用验证码、IP限制、内容过滤等策略。 9. **SEO优化**:为了吸引更多的访问者,论坛内容需要对搜索引擎友好,包括元标签、URL结构...

    java开源包3

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics