<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢(mèng)蝶

    生活、程序、未來(lái)
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理

    rails實(shí)現(xiàn)驗(yàn)證碼

    Posted on 2007-04-09 17:13 dennis 閱讀(3429) 評(píng)論(3)  編輯  收藏 所屬分類(lèi): 動(dòng)態(tài)語(yǔ)言
        網(wǎng)上其實(shí)有一大堆這樣的資料了,我再寫(xiě)也沒(méi)多大價(jià)值,談下幾個(gè)注意點(diǎn)吧。
    1.在windows上安裝Rmagic,如果你是通過(guò)gem安裝的,
    require 'Rmagic'
    要修改為:
    require 'rubygems'
    require 
    'Rmagick'
    才能正確引入。

    2.網(wǎng)上那個(gè)例子,畫(huà)布是使用Rmagic內(nèi)置的圖像格式,Rmagic內(nèi)置的圖像格式還有:

    gradient*

    梯度,比如gradient:red-blue

    granite

    花崗石,比如: "granite:".

    logo

    logo型的圖像. 如: "logo:"后面會(huì)多顯示一個(gè)五角星^_^

    netscape

    非常漂亮的彩條。如: "netscape:"

    null*

    空白 使用方式: "null:"

    rose


    玫瑰 使用方式 : "rose:"

    xc*

    設(shè)置一個(gè)背景色,比如"xc:green"


    一個(gè)修改的例子,在rails的models下存為noisy_image.rb,在Controller就可以這樣調(diào)用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應(yīng)用的結(jié)合,和一般的驗(yàn)證碼原理一樣,將產(chǎn)生的隨機(jī)數(shù)存儲(chǔ)在session或者request范圍內(nèi),提交的時(shí)候進(jìn)行比較驗(yàn)證即可。比如產(chǎn)生圖片的時(shí)候?qū)㈦S機(jī)字母存儲(chǔ)在session[:code]中:

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

     session[:code] = session[:noisy_image].code

    驗(yàn)證的時(shí)候,比較提交的type_code與session[:code]即可,為了安全性考慮,最好還是不考慮使用客戶(hù)端驗(yàn)證。

     unless session[:code]==params[:type_code]
          flash[:notice]
    ='驗(yàn)證碼填寫(xiě)錯(cuò)誤,請(qǐng)重新注冊(cè),謝謝!'
          
    return redirect_to :action=>:new  
     end

    在頁(yè)面顯示圖片,類(lèi)似servlet一樣直接調(diào)用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">





    評(píng)論

    # re: rails實(shí)現(xiàn)驗(yàn)證碼  回復(fù)  更多評(píng)論   

    2007-08-16 16:10 by sixwings
    請(qǐng)問(wèn) 如何實(shí)現(xiàn) 換個(gè)驗(yàn)證碼 然后只更新那個(gè)圖片啊

    # re: rails實(shí)現(xiàn)驗(yàn)證碼  回復(fù)  更多評(píng)論   

    2008-07-16 16:45 by wzp2000
    granite = Magick::ImageList.new('xc:#EDF7E7')

    為什么提示我這一句:can't convert String into Integer

    樓主知道是什么原因么?

    # re: rails實(shí)現(xiàn)驗(yàn)證碼[未登錄](méi)  回復(fù)  更多評(píng)論   

    2008-07-16 17:18 by dennis
    @wzp2000
    這個(gè)文章用的RMagic可能已經(jīng)比較老版本了,最新的還是自己參考文檔吧。
    主站蜘蛛池模板: 光棍天堂免费手机观看在线观看 | 免费的一级黄色片| 亚洲精品美女在线观看播放| 18禁超污无遮挡无码免费网站| 亚洲男人的天堂www| 成人爽a毛片免费| 久久久久无码精品亚洲日韩| 九九精品成人免费国产片| 久久精品国产亚洲AV麻豆王友容| 免费不卡在线观看AV| 亚洲图片校园春色| 嫩草影院免费观看| 美美女高清毛片视频黄的一免费| 亚洲精品成人网久久久久久| 成年大片免费视频播放一级| 亚洲中文字幕在线乱码| 色欲国产麻豆一精品一AV一免费| 亚洲欧洲尹人香蕉综合| 午夜一区二区免费视频| 成人a毛片视频免费看| 国产亚洲美女精品久久久久狼| 免费国产黄网站在线观看| 狠狠色伊人亚洲综合网站色| 又粗又硬又黄又爽的免费视频| 国产精品偷伦视频免费观看了| 国产亚洲一区二区三区在线观看 | 中国videos性高清免费| 亚洲AV综合色区无码一区| 91手机看片国产永久免费| 国产精品无码亚洲一区二区三区| 亚洲狠狠爱综合影院婷婷| 日本免费人成视频在线观看| 亚洲日韩国产一区二区三区在线| 国产91精品一区二区麻豆亚洲| 一区二区三区观看免费中文视频在线播放 | 亚洲人成电影网站色| 亚洲免费日韩无码系列| 114级毛片免费观看| 羞羞视频免费网站含羞草| 亚洲高清在线观看| 日韩激情淫片免费看|