`

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实现验证码实例

    实例的源代码 博文链接:https://babo.iteye.com/blog/72298

    Rails实现的简历系统

    用rails实现的简单的简历系统,其中包括图片上传、验证码生成、数据查询、分页、日历、sort、邮件发送

    easy_captcha:验证码插件(Rails)

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

    google_safe_browsing:Google Safe Browsing V2 API的Ruby实现

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

    java开源包3

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

    java开源包4

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

    simple-captcha2

    SimpleCaptcha(2) 是最简单和强大的验证码插件。 它的实现需要在视图和控制器/模型中添加一行。 SimpleCaptcha2 可以与 Rails 3 + 4 一起使用。这是流行的 Rubygem simple_captcha一个分支,它被废弃了。 ##特征...

    simple-captcha

    SimpleCaptcha(2)是最简单且功能强大的验证码插件。 它的实现需要在视图和控制器/模型中添加一行。 SimpleCaptcha2可以与Rails 3 + 4一起使用。这是流行的Rubygem simple_captcha一个分支,被遗弃了。 ##特征 ...

    gt-ruby-sdk:GtWeb Ruby SDK

    Geetest是一个很不错的验证码组件,使用方便,安全性强。可惜没有ruby的sdk。于是顺手写了一个,由于实在太简单,所以没有做成gem,只留下实现和demo自取。 如何使用demo git clone cd geetest_ruby_sdk bundle ...

    JAVA上百实例源码以及开源项目源代码

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    JAVA上百实例源码以及开源项目

    百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText();...

    java开源包1

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

    java开源包11

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

    java开源包2

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

Global site tag (gtag.js) - Google Analytics