``` //用於生成驗證ma const svgCaptcha = require("svg-captcha") //mysql 用於在數據庫中查找前端輸入的用戶名和密碼 const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: '12345678', database: 'sys' }); connection.connect(); //redis數據庫用於存儲隨機生成的驗證碼 //便於及時更新 const client = redis.createClient(); //redis 若是沒有啓動redis,會報錯 //redis 啓動命令 redis-server //新建terminal 輸入redis-cli client.on("error", function (err) { console.log("Trror" + err); }) //生成token 方便redis存儲和替換 function getID(length) { return Number(Math.random().toString().substr(3, length) + Date.now()).toString(36); } //驗證碼 app.get("/cap", (req, res) => { const cap = svgCaptcha.create(); //cap=>{data:...,text:jsoa} //text:隨機生成的四位驗證碼 //data:傳遞給前端的驗證碼的圖片 let text = cap.text; res.type("svg"); //生成一個ID redis保存 並傳遞給前端 let captchaId = getID(10) client.set(captchaId, text) res.send({ cap, captchaId }) return }) //前端引用圖片 // <span dangerouslySetInnerHTML={{ __html: captcha }} onClick={() => this.getcaptcha()}></span> //登錄 app.post("/getlogin", async (req, res) => { let { username, password, verification, captchaId } = req.body; let redisCaptcha = await new Promise((resolve) => { client.get(captchaId, function (err, res) { return resolve(res) }) }) if (verification === redisCaptcha) { } else { res.send({ code: 0, message: "驗證碼錯誤或過時" }) return } //數據庫中查找數據 connection.query(`SELECT * FROM table where username='${username}' &&passwrd='${password}'`, function (error, results, fields) { if (error) throw error; if (results[0]) { res.send({ code: 1, message: "登錄成功" }) } else { res.send({ code: 0, message: "用戶名或密碼錯誤" }) return } }); }) ```