1. 程式人生 > >Node.js 全棧——註冊——驗證碼

Node.js 全棧——註冊——驗證碼

驗證碼

Node.js 的驗證碼確實很坑,底層本身不帶有這些操作。查詢了很多方法,大多都需要安裝新的底層依賴,跨平臺性非常低。而且涉及到一個很重要的問題,就是在部署的時候,你還得在部署的平臺上再安裝一次這個依賴。

介於以上原因,選擇了一個國人產的簡單的驗證碼生成庫 node-gd-bmp

生成驗證碼

如何生成,參考 node-gd-bmp 文件。這裡只是研究如何將生成的驗證碼回傳給客戶端。

  • 回傳一個字串

    伺服器:

    router.get('/captcha', function (req, res) {
    const img = makeCapcha();
    res.setHeader('Content-Type'
    , "text/plain"); // 設定響應頭 res.end('data:image/bmp;base64,' + img.getFileData().toString('base64')); });

    客戶端

    axios({
        url: '/security-code/captcha',
        method: 'GET',
        responseType: 'text'
    }).then(res => {
        this.setState({
        vcLoding: false,
        captcha: res.data // 使用返回的字串,這裡是在 React 中使用
    });

    HTML:

     // jsx 語法
    <img src={captcha} src='驗證碼'/> 
    // 也可用作背景
    <Button style={{backgroundImage: `url(${captcha})`}} onClick={this.handleVCButtonClick}></Button>
  • 回傳一張圖片

    伺服器:

    router.get('/captcha', function (req, res) {
    const img = makeCapcha();
    res.setHeader('Content-Type', "image/bmp"); // 設定響應頭
    res.end(img.getFileData()); });

    客戶端

    handleButtonClick = () => {
        let BaseUrl = '/security-code/captcha?str=';
        // randomStr(16) 用於獲取16位的隨機字串
        // 在每次點選的時候 url 都改變,以防止瀏覽器進行快取
        this.setState({
            captcha: BaseUrl + randomStr(16)
        });
    }

    HTML:

     // jsx 語法
    <img src={captcha} src='驗證碼'/> 
    // 也可用作背景
    <Button style={{backgroundImage: `url(${captcha})`}} onClick={this.handleButtonClick} loading={vcLoding}></Button>

生成驗證碼:

由於驗證碼會在專案中的多個使用,因此,我們將它提取到一個單獨的模組:

// captcha.js
var svgCaptcha = require('svg-captcha');

// // 全域性配置, 需要時將註釋取消
// const options = {
//   width: 100,
//   height: 20,
//   fontSize: 25,
// }

// Object.assign(svgCaptcha.options, options);

const makeCapcha = () => {
  var captcha = svgCaptcha.create({
    size: 6,
    ignoreChars: '0o1i',
    noise: 3,
    width: 100,
    height: 30,
    fontSize: 25,
  });
  return captcha;
}

module.exports = makeCapcha;
  • 回傳 svg

    伺服器:

    router.get('/captcha', function (req, res) {
        const captcha = makeCapcha();
        // req.session.captcha = captcha.text;
    
        res.type('svg');
        res.status(200).send(captcha.data);
    });

    客戶端

    handleButtonClick = () => {
        let BaseUrl = '/security-code/captcha?str=';
        // randomStr(16) 用於獲取16位的隨機字串
        // 在每次點選的時候 url 都改變,以防止瀏覽器進行快取
        this.setState({
            captcha: BaseUrl + randomStr(16)
        });
    }

    HTML:

     // jsx 語法
    <img src={captcha} src='驗證碼'/> 
    // 也可用作背景
    <Button style={{backgroundImage: `url(${captcha})`}} onClick={this.handleButtonClick} loading={vcLoding}></Button>

除了在伺服器生成驗證碼上有區別外,與 node-gd-bmp 用法相同。對比兩者,svg-captcha 更簡潔,更優美,但樣式偏少;node-gd-bmp 的定製化程度更高。

驗證

驗證碼實現的基本原理是客戶端將使用者填寫的驗證碼資料與伺服器上儲存的資料進行比對。

在伺服器上儲存驗證碼資料有多種方式,常用的有 session、redis

  • session

    在 session 儲存驗證碼資料是一種常見的做法,我們在生成驗證的時候會獲得一個字串,我們將此字串儲存在當前的 session 中,當用戶提交驗證碼到伺服器時,將 session 中儲存的字串與使用者提交的字串進行比對。

    儲存驗證碼:

    router.get('/captcha', function (req, res) {
        const captcha = makeCapcha();
        // 儲存驗證碼字串
        req.session.captcha = captcha.text;
    
        res.type('svg');
        res.status(200).send(captcha.data);
    });

    驗證驗證碼:

    router.post('/sign_up', function (req, res) {
        if (req.body.captcha === res.session.captcha) {
            console.log('驗證成功');
        }
    });
  • redis

相關推薦

Node.js ——註冊——驗證

驗證碼 Node.js 的驗證碼確實很坑,底層本身不帶有這些操作。查詢了很多方法,大多都需要安裝新的底層依賴,跨平臺性非常低。而且涉及到一個很重要的問題,就是在部署的時候,你還得在部署的平臺上再安裝一次這個依賴。 介於以上原因,選擇了一個國人產的簡單的驗證碼

Redux+React Router+Node.js開發

流數據 inux sql數據庫 安全 體系 dea 基礎 tomcat集群 color 詳情請交流 QQ 709639943 01、Java深入微服務原理改造房產銷售平臺 02、跨平臺混編框架 MUI 仿豆瓣電影 APP 03、Node.js入門到企業Web開發中

Redux+React Router+Node.js開發招聘app實戰

https://pan.baidu.com/s/1p4cPuo_t70Eh0D_dzfJq2Q Redux+React Router+Node.js全棧開發招聘app實戰 Redux+React Router+Node.js全棧開發 在別人剛理解React的時候,你已經找到Redux+Rea

React 16+Redux+React Router 4 Node.Js開發招聘App專案實戰分享

第1章 介紹課程目標和學習內容包括課程概述、課程安排、學習前提、講授方式等方面的介紹,最後演示了整個招聘App的功能,讓同學們對課程專案有一個直觀的瞭解。1-1 課程導學第2章 知識儲備2-1 介紹React開發環境2-2 ES6常用語法2-3 express+mongodb

React 16+Redux+React Router 4 Node.Js開發招聘App專案實戰(雲盤下載)

第1章 介紹課程目標和學習內容包括課程概述、課程安排、學習前提、講授方式等方面的介紹,最後演示了整個招聘App的功能,讓同學們對課程專案有一個直觀的瞭解。1-1 課程導學第2章 知識儲備2-1 介紹React開發環境2-2 ES6常用語法2-3 express+mongodb

JavaScript、Node.js式開發

前言 Web前端開發現在人才缺口大,薪資高,而且語法簡單是最容易進入IT行業的一個程式設計方向。使用也非常廣泛PC頁面、移動端頁面、小程式、公眾號等都用得到前端技術開發,在這裡分享一套非常完善的課程學習體系。 一、煉體篇(企業級網站架構與部署——Web前端基礎篇) 1.

Node.js 局對象

home failure 日期 數據 web 命令行參數 也會 腳本文件 異步調用 Node.js 全局對象 JavaScript 中有一個特殊的對象,稱為全局對象(Global Object),它及其所有屬性都可以在程序的任何地方訪問,即全局變量。 在瀏覽器 Java

jmeter使用jdbc獲取註冊驗證進行註冊

driver datebase cnblogs ora 實例 lib table 不同數據庫 分享 自動化工具測試註冊功能時,往往會遇到驗證碼,這個煩人的驗證碼怎麽能夠解決掉呢? 通常有兩種方法 讓開發禁用註冊碼,或在測試環境寫個固定的

Node.js調用C#代

詳細 pac 地址 關於 esp export static ole function 在Node.js的項目中假如我們想去調用已經用C#寫的dll庫該怎麽辦呢?在這種情況下Edge.js是一個不錯的選擇,Edge.js是一款在GitHub上開源的技術,它允許Node.js

PHP JS CSS session實現驗證功能

驗證碼 ges ron oss art tex lse 個數 bcd PHP JS CSS session實現驗證碼功能 頁面<?php//校驗驗證碼if (isset($_POST["authcode"])) {session_start();

VUE 註冊驗證頁面實例

turn mit name countdown asc input count css highlight 代碼如下 無css <template> <div> <header> <router-link

Flask Vue.js開發

Flask Vue.js全棧開發 1. Flask Vue.js全棧開發教程系列 Flask Vue.js全棧開發|第1章:建立第一個Flask RESTful API Flask Vue.js全棧開發|第2章:Vue.js通過axios訪問Flask RESTful API Fla

JSP中使用者註冊驗證

目錄 0.碼仙勵志 不要讓未來的你,討厭現在的自己,困惑誰都有,但成功只配得上勇敢的行動派 1.驗證碼有啥用 在我們註冊時,如果沒有驗證碼的話,我們可以使用URLConnection來寫一段程式碼發出註冊請求。甚至可以使用while(true)

javaweb登陸註冊驗證的顯示生成(在第一次載入頁面的時候,sesson中的驗證總是為空)

問題描述:在寫一個登陸介面的時候用到了驗證碼,產生的問題在於使用myeclipse第一次載入index.jsp(我的登陸介面)的時候驗證總是失敗,重新整理一次後驗證成功,或者在第一次進入index.jsp頁面手動重新整理。這就很讓人討厭了。問題的原因:經過除錯後發現,第一從開

java實現qq郵箱傳送註冊驗證

import javax.mail.*; import javax.mail.internet.MimeMessage;/** * * @param email 傳送郵箱驗證碼(註冊) * @return 驗證碼給前段 */ @RequestMapping(valu

js實現傳送簡訊驗證後60秒倒計時

1、input[type=‘button’]按鈕 js方法實現 <!DOCTYPE html> <html> <head> <script type="text/javascript"> var countdown=60;

Android自定義方框EditText註冊驗證

先來個效果圖讓大家看一看,現在好多app都用類似的註冊頁 實現思路 用一個透明的EditText與四個TextView重疊,並給TextView設定預設背景 第4個TextView輸入完成後,要設定回撥,並且要加入增加刪除的回撥 還要監聽EditTe

JS如何製作圖形驗證

實際效果 第一步我們來到要展示驗證碼的頁面,當我們按下營業執照的時候讓其,彈出一個彈框,彈框的上面就是驗證碼,如圖一所示: (圖一) 彈框的樣式如圖二所示: (圖二) 我們要對驗證碼的值進行校驗,判斷驗證碼是否輸入正確,當輸入不正確的時候,我們提示錯誤

js 生成和獲取驗證

<html><head><style type="text/css">.code{background-image:url(111.jpg);font-family:Arial;font-style:italic;color:green;b

JS+ASP.NET 圖片驗證

圖片驗證碼控制元件 <img id="imgYZM" src="CheckCode.aspx" onmouseup="RefreshCheckImage()" alt="點選重新獲取" /> 點選再次獲取驗證碼 function Refr