登錄 數據庫查找 以及redis校驗驗證碼

```
//用於生成驗證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
          }
        });

      })
```
相關文章
相關標籤/搜索