分享Ruby on rails实现验证码技巧
Ruby on rails的应用可以帮助编程人员快速简便灵活的实现各种代码编程。那么今天我们就来看看Ruby on rails实现验证码的相关技巧方法。
1.在windows上安装Rmagic,如果你是通过gem安装的
require'Rmagic'
要修改为:
require'rubygems'
require'Rmagick'
才能正确引入。
2.网上那个Ruby on rails实现验证码例子,画布是使用Rmagic内置的图像格式,Rmagic内置的图像格式还有:
gradient*梯度,比如gradient:red-blue
granite
花岗石,比如: "granite:".
logo
logo型的图像. 如: "logo:",后面会多显示一个五角星^_^
netscape
非常漂亮的彩条。如: "netscape:"
null*
空白 使用方式: "null:"
rose
玫瑰 使用方式 : "rose:"
xc*
设置一个背景色,比如"xc:green"
一个修改的Ruby on rails实现验证码例子,在rails的models下存为noisy_image.rb,在Controller就可以这样调用NoisyImage.new(6) :
require'rubygems'
require'Rmagick'
classNoisyImage
includeMagick
attr_reader:code,:code_image
Jiggle=15
Wobble=15
definitialize(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
Ruby on rails实现验证码在进行验证的时候,比较提交的type_code与session[:code]即可,为了安全性考虑,最好还是不考虑使用客户端验证。
unlesssession[:code] ==params[:type_code] flash[:notice]= '验证码填写错误,请重新注册,谢谢!' returnredirect_to:action=>:new end
在页面显示图片,类似servlet一样直接调用Controller的action: