分享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:

相关推荐