2007-07-30
Rails实现随机验证码
早已经实现了,现在写下来,便于以后使用。
ValidatorImageGeneratorController.rb代码如下
ruby 代码
- class ValidatorImageGeneratorController < ApplicationController
- before_filter :record_code
- skip_filter :record_url
- def image
- if session[:code_image]
- send_data(session[:code_image], :type => 'image/jpeg')
- else
- #exception thrown
- end
- end
- private
- def record_code
- image = ValidatorImage.new
- session[:code] = image.code
- session[:code_image] = image.code_image
- end
- end
ValidatorImage.rb代码如下(此文件位于app/model下面)
ruby 代码
- require 'rubygems'
- require 'RMagick'
- class ValidatorImage
- include Magick
- attr_reader :code, :code_image
- Jiggle = 5
- Wobble = 5
- Len = 4
- def initialize
- code_array = []
- 1.upto(Len) { code_array << rand(9).to_s }
- granite = Magick::ImageList.new('xc:#EDF7E7')
- canvas = Magick::ImageList.new
- canvas.new_image(20 * Len, 20, Magick::TextureFill.new(granite))
- text = Magick::Draw.new
- #text.font_family = "times"
- text.pointsize = 15
- 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, 15 + rand(Jiggle), c){
- self.rotation=rot
- self.font_weight = weight
- self.fill = 'green'
- }
- cur += 20
- }
- @code = code_array.to_s
- @code_image = canvas.to_blob{ self.format = "JPG" }
- end
- end
需要使用的时候在html的img标签中引入就可以了。
code_image_url方法片段:
ruby 代码
- def code_image_url
- url_for :controller => :validator_image_generator, :action => :image
- end
简单说明,利用RMagick插件随机生成数字,调用validator_image_generator controller 下的 image action 时候,由于record_code filter的存在,会将验证码存储在session中。验证时候从sesssion中取就可以了。
效果图见附件:
- 01:40
- 浏览 (690)
- 评论 (6)
- 分类: Ruby On Rails
- 相关推荐
评论
wzp2000
2008-07-16
执行到这一句
granite = Magick::ImageList.new('xc:#EDF7E7')
提示我:
can't convert String into Integer
这是什么原因啊?
granite = Magick::ImageList.new('xc:#EDF7E7')
提示我:
can't convert String into Integer
这是什么原因啊?
llleelay
2008-05-22
Thanks a lot
sstt
2008-04-23
我就想拿验证码来防止这个灌水,没想到JAVAEYE的blog也没有这个功能。
sstt
2008-04-23
ggggggggggggggggg
sstt
2008-04-23
ggddddddddddddddd
wadywei
2007-11-19
在您这问个问题:我在网上下载了RMagick-1.15.9_IM-6.3.5-8-Q8_prod 安装成功ibr require 'rmagick'的返回之是true
但是在rails 的model 引用 require 'rubygems' require 'RMagick',启动服务访问页面的时候去报没有找到
core_rl_magick_.dll 这是怎么回事啊?
但是在rails 的model 引用 require 'rubygems' require 'RMagick',启动服务访问页面的时候去报没有找到
core_rl_magick_.dll 这是怎么回事啊?
发表评论
- 浏览: 18985 次
- 性别:

- 来自: 成都

- 详细资料
搜索本博客
最新评论
-
Rails实现随机验证码
执行到这一句granite = Magick::ImageList.new('x ...
-- by wzp2000 -
表单验证错误信息一些使用 ...
请问你提到的中文化validator的资料哪里能找到?我一直搜索不到阿..
-- by chaoqun2003 -
Rails实现随机验证码
Thanks a lot
-- by llleelay -
Rails实现随机验证码
我就想拿验证码来防止这个灌水,没想到JAVAEYE的blog也没有这个功能。
-- by sstt -
Rails实现随机验证码
ggggggggggggggggg
-- by sstt






评论排行榜