分享Ruby on rails实现验证码技巧
创始人
2024-06-16 05:40:42
0

Ruby on rails的应用可以帮助编程人员快速简便灵活的实现各种代码编程。那么今天我们就来看看Ruby on rails实现验证码的相关技巧方法。#t#

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

 

  1. require'rubygems'  
  2. require'Rmagick'  
  3. classNoisyImage  
  4. includeMagick  
  5. attr_reader:code,:code_image  
  6. Jiggle=15 
  7. Wobble=15 
  8. definitialize(len)  
  9. chars=('a'..'z').to_a-['a','e','i','o','u']  
  10. code_array=[]  
  11. 1.upto(len){code_array<(chars.length)]}  
  12. granite=Magick::ImageList.new('xc:#EDF7E7')  
  13. canvas=Magick::ImageList.new  
  14. canvas.new_image(32*len,50,Magick::
    TextureFill.new(granite))  
  15. text=Magick::Draw.new  
  16. text.font_family='times' 
  17. text.pointsize=40 
  18. cur=10 
  19. code_array.each{|c|  
  20. rand(10)>5?rot=rand(Wobble)
    :rot=-rand(Wobble)  
  21. rand(10)>5?weight=NormalWeight
    :weight=BoldWeight 
  22. text.annotate(canvas,0,0,cur,
    30+rand(Jiggle),c){  
  23. self.rotation=rot  
  24. self.font_weight=weight  
  25. self.fill='green' 
  26.  }  
  27.  cur+=30  
  28. }  
  29. @code=code_array.to_s  
  30. @code_image=canvas.to_blob{  
  31. self.format="JPG" 
  32. }  
  33. end  
  34. end 

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

 

  1. session[:noisy_image]=
    NoisyImage.new(6)  
  2. session[:code]=session
    [:noisy_image].code 

Ruby on rails实现验证码在进行验证的时候,比较提交的type_code与session[:code]即可,为了安全性考虑,***还是不考虑使用客户端验证。

 

  1. unlesssession[:code]
    ==params[:type_code]  
  2. flash[:notice]=
    '验证码填写错误,请重新注册,谢谢!'  
  3. returnredirect_to:action=>:new   
  4. end 

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

 

  1. defcode_image  
  2. image=session[:noisy_image].code_image  
  3. send_dataimage,:type=>
    'image/jpeg',:disposition=>'inline'  
  4. end  
  5. < imgheightimgheight='30'
    src="/test/code_image"> 

Ruby on rails实现验证码的相关技巧方法就为大家介绍到这里。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...