RSS
热门关键字:  java  Ajax  JSP  JSF  Struts
当前位置 : 首页>Ruby>列表

在ruby on rails中实现验证码

来源: 作者: 时间:2007-09-21 点击:

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(4) :

ruby 代码
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]中:

def register
    session[:noisy_image] = NoisyImage.new(4) #生成一个有4字符的图片
    session[:code] = session[:noisy_image].code
 
end

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

 def code_check
    if params[:code]!=session[:noisy_image].code
         render_text " 验证码错误!"
    else
        render_text ""
    end  

共2页: 上一页 1 [2] 下一页
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
Google Adsense
相关文章