欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS使用svg-captcha生成圖片驗證碼的示例代碼

 更新時間:2024年06月16日 08:42:14   作者:剪刀石頭布啊  
nodejs(nestjs)后端開發(fā)過程中會有一個需要生成圖片驗證碼的功能,其能減少機器人攻擊操作,本文我們通過?svg-captcha,來實現(xiàn)一個驗證碼功能,并且小小的優(yōu)化一下其邏輯,需要的朋友可以參考下

nodejs(nestjs)后端開發(fā)過程中會有一個需要生成圖片驗證碼的功能,其能減少機器人攻擊操作,這也是開發(fā)過程中比較常見的功能,這邊我們通過 svg-captcha,來實現(xiàn)一個驗證碼功能,并且小小的優(yōu)化一下其邏輯

首先導入對應庫 svg-captcha

yarn add svg-captcha

基礎使用就這樣了,很簡單

var svgCaptcha = require('svg-captcha');

const svg = svgCaptcha.create()
svg.text 文本
svg.data 圖片數(shù)據(jù)
文本保存用于校驗,圖片數(shù)據(jù)返回給客戶端,讓客戶端進行對比即可

這個驗證碼只能生成文本和圖片,正常生成代碼的時候我們需要給其一個隨機驗證碼,這樣我們需要保存文本信息,方便用于校驗,甚至傳一個自己生成的id當唯一值對比,但仍然會存在一個問題,這個驗證碼是沒有身份信息的,隨便一個人訪問都要生成一個新的,那么短時間內人過多的話,會生成非常多的驗證碼(當然我們只保存一個自己生成的id、text正常用肯定沒事,過期清理即可)

如果碰到人特別多的情況怎么辦,我們直接保存幾個驗證碼文本和圖片即可,假設限定數(shù)量10個,循環(huán)利用,有效期1分鐘,過期剔除換新的,用完定期清理即可,優(yōu)點數(shù)量少訪問快,缺點就是一段時間內會出現(xiàn)重復的(實際上稍微多增加幾個就看不出來了,因為下次是隨機的,過期也會換新的,內存峰值最大也就那樣了,以假亂真)

ps:開發(fā)的世界真真假假誰有分得清呢

//自己也可以根據(jù)需要添加 id 哈,這里就加入id了,只要對一個是對的那么就是對的,自己可以更加嚴謹點哈
type ImageCodeType = {
    text: string
    image: string
    timeStamp: number
}

private imgCodes: any[] = []
private imgClearTimeout?: NodeJS.Timeout

getVerificationCode() {
    const currentTime = new Date().getTime()
    const newCode: ImageCodeType[] = []
    this.imgCodes.forEach((item) => {
        if (currentTime - item.timeStamp < 60000) {
            newCode.push(item)
        }
    })
    let imgInfo: ImageCodeType
    if (newCode.length < 10) {
        const captchaCode = svgCaptcha.create()
        imgInfo = {
            text: captchaCode.text.toLocaleLowerCase(),
            image: captchaCode.data,
            timeStamp: new Date().getTime(),
        }
        newCode.push(imgInfo)
    } else {
        const index = Math.floor(new Date().getTime() % 10)
        imgInfo = newCode[index]
    }
    this.imgCodes = newCode

    //避免長時間占用內存,2分鐘后無人使用清理
    if (this.imgClearTimeout) {
        clearTimeout(this.imgClearTimeout)
    }
    this.imgClearTimeout = setTimeout(() => {
        this.imgCodes.length = 0
        this.imgClearTimeout = void 0
    }, 120000)

    return imgInfo.image
}

校驗一下,設置了id就拿到對應的再校驗即可,這里就直接滿足其中一個即可

//我們對比一下
const code = params.verification_code.toLocaleLowerCase()
if (!this.img_code.find((e) => e.text === code)) {
    return throw '請輸入正確的驗證碼'
}

到此這篇關于JS使用svg-captcha生成圖片驗證碼的示例代碼的文章就介紹到這了,更多相關JS svg-captcha圖片驗證碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論