<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)比較老版本了,最新的還是自己參考文檔吧。
    主站蜘蛛池模板: 亚洲AV无码乱码麻豆精品国产| 在线观看特色大片免费网站| 免费在线看v网址| 综合亚洲伊人午夜网| 亚洲av无码专区首页| 麻豆高清免费国产一区| 亚洲色偷偷偷鲁综合| 国产精品亚洲专区在线播放| 国产成人午夜精品免费视频| 亚洲国产女人aaa毛片在线 | 亚洲一区二区免费视频| 亚洲乱亚洲乱妇无码麻豆| MM1313亚洲国产精品| 成年女人喷潮毛片免费播放| 久久精品国产亚洲av高清漫画| 国产免费一区二区三区免费视频 | 亚洲精品福利视频| 国产免费播放一区二区| 免费又黄又爽的视频| 亚洲色大情网站www| 91精品视频免费| 亚洲精品美女久久久久9999| 最近免费中文字幕MV在线视频3| 亚洲成av人片在线观看天堂无码| 亚洲AV无码AV男人的天堂不卡 | 亚洲国产精品无码一线岛国| 高清免费久久午夜精品| 免费观看亚洲人成网站| 日本亚洲高清乱码中文在线观看| 免费涩涩在线视频网| 精品国产日韩久久亚洲| 国产在线观看片a免费观看| 亚洲精品偷拍无码不卡av| 午夜理伦剧场免费| 亚洲视频在线观看| 男女作爱在线播放免费网站| 人人狠狠综合久久亚洲婷婷 | 无码精品人妻一区二区三区免费看| 77777亚洲午夜久久多人| 精品人妻系列无码人妻免费视频| 久久国产成人亚洲精品影院|