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">

文章转自庄周梦蝶  ,原文发布时间5.17

时间: 2024-11-18 03:26:53

rails实现验证码的相关文章

rails 中怎么设置图片的验证码?有没有插件?

问题描述 rails 中怎么设置图片的验证码?有没有插件?这个是怎么实现的呢? 解决方案 http://hideto.iteye.com/blog/199757讲的就是这个呢

Ruby on rails开发从头来(windows)(五)-对输入进行验证

在上一篇随笔中,我们完成了对一个表Product的添删查改的操作,你一定注意到了,我们还没有添加任何验证,例如Price,我们可以随意输入任何字符,而不会有错误提示.这次,我们就来看看怎样添加验证输入功能. 1.打开depot\app\models目录下的product.rb文件,向其中添加代码,如下: class Product < ActiveRecord::Base validates_presence_of :title, :description, :image_url end 2.再

Rails安全导读【五】

7. 用户管理 - 几乎每个web应用都必须去处理授权和认证.避免你自己重复造轮子,建议你去使用通用的插件.但是请保持它们是最新的.一些额外的 预防措施可以让你的应用更加安全. 有一些Rails可用的授权和认证插件.密码加密以后保存好于直接保存纯文本密码.最流行的插件是可以避免session定制的 restful_authentication. 然而早期的版本在某些情况下你即使没有用户名和密码也可以登陆. 每个新用户可以通过一个带激活码链接的电子邮件来激活他的帐户.帐户激活之后,数据库里激活码那

PHP实现变色验证码实例

 验证码想必大家都有见到过吧,在本文为大家介绍下PHP如何实现变色验证码,感兴趣的朋友可以参考下 代码如下: <?php  header("Content-type: image/png,charset='utf-8'");  $im = imagecreatetruecolor(400, 30);  //白色  $white = imagecolorallocate($im, 255, 255, 255);  //红色  $red = imagecolorallocate($i

一个很简单的验证码程序

程序|验证码 原程序http://vifo.vicp.net:8088/datalib/ShowTopic.asp?id=108:10:1:1 主程序共三个 我的调用方式 <script language="javascript" src="/verify/num.asp"></script>验证方式 if trim(Loginnum)<>trim(session("Loginnum")) thenRespon

PHP验证码类实例

 这篇文章主要介绍了一个好用的PHP验证码类实例,有需要的朋友可以参考一下 分享一个好用的php验证码类,包括调用示例. 说明: 如果不适用指定的字体,那么就用imagestring()函数,如果需要遇到指定的字体,就要用到imagettftext()函数.字体的位置在C盘下Windows/Fonts.   参考了网上的php 生成验证码的方法,以及php 图片验证码和php 中文验证码的生成方法.用到了PHP GD库的相关知识.   1,生成验证码的类 VerificationCode.cla

YII 验证码

验证码类 Java代码   <?php      class Captcha extends CCaptchaAction   {       public function run()       {           if (isset($_GET[self::REFRESH_GET_VAR])) // AJAX request for regenerating code           {               $code = $this->getVerifyCode(tru

PHP利用GD库画图和生成验证码图片

首先得确定php.ini设置有没有打开GD扩展功能,测试如下 print_r(gd_info()); 如果有打印出内容如下,则说明GD功能有打开: Array ( [GD Version] => bundled (2.0.34 compatible) [FreeType Support] => 1 [FreeType Linkage] => with freetype [T1Lib Support] => 1 [GIF Read Support] => 1 [GIF Crea

验证码-用php模拟登陆方正教务系统的问题

问题描述 用php模拟登陆方正教务系统的问题 获取验证码 <?php header('Content-Type:image/png');$authcode_url=""http://jwxt1.cumt.edu.cn/CheckCode.aspx"";$cookieFile=""cookie.tmp"";$ch = curl_init($authcode_url);curl_setopt($chCURLOPT_COOKI