Maison >interface Web >Questions et réponses frontales >Nodejs ne nécessite pas de code de vérification de connexion

Nodejs ne nécessite pas de code de vérification de connexion

王林
王林original
2023-05-13 18:17:38692parcourir

Avec le développement d'Internet, les codes de vérification sont devenus un outil important pour assurer la sécurité des sites Web. De nombreux sites Web exigent que les utilisateurs saisissent des codes de vérification lors d'opérations sensibles, d'enregistrement, de connexion, etc. afin d'empêcher les programmes malveillants et les attaques de robots et de garantir la sécurité et l'authenticité du site Web. Cependant, dans certains scénarios, afin d'améliorer l'expérience utilisateur et la commodité opérationnelle, il est nécessaire de fournir certains services de code de vérification qui ne nécessitent pas de connexion. À l'heure actuelle, Node.js, dont dépend JavaScript, peut exercer ses excellentes fonctionnalités. L'architecture asynchrone de

Node.js et la syntaxe JavaScript facile à apprendre le rendent très pratique pour les services de code de vérification. Grâce aux fonctionnalités de Node.js, nous pouvons facilement mettre en œuvre des services de code de vérification qui ne nécessitent pas de connexion, et le déploiement et la maintenance sont très simples.

Tout d'abord, nous devons comprendre le principe et la composition du code de vérification. De manière générale, le service de code de vérification comprend les composants suivants :

  1. Générateur de code de vérification : utilisé pour générer des images de code de vérification.
  2. Reconnaissance du code de vérification : utilisé pour identifier les caractères du code de vérification dans les images du code de vérification.
  3. Cache : utilisé pour stocker temporairement les caractères du code de vérification générés et les résultats de vérification correspondants.

Lorsque l'utilisateur se trouve dans un scénario où un code de vérification est requis, le serveur générera aléatoirement un ensemble d'images de code de vérification, qui contiennent plusieurs caractères de code de vérification. Les utilisateurs doivent saisir les caractères corrects du code de vérification pour procéder aux opérations ultérieures. Une fois que l'utilisateur a saisi le code de vérification, le serveur comparera les caractères du code de vérification saisis par l'utilisateur avec les résultats correspondants dans le cache pour déterminer si la saisie de l'utilisateur est correcte.

Dans Node.js, des bibliothèques tierces peuvent être utilisées pour implémenter divers composants du service de code de vérification. Voici un exemple d'utilisation des bibliothèques Canvas et nodemailer pour implémenter le service de code de vérification.

Tout d'abord, installez les bibliothèques dépendantes nécessaires :

npm install canvas nodemailer

Ensuite, écrivez le code :

const express = require('express');
const Canvas = require('canvas');
const nodemailer = require('nodemailer');

const app = express();
const PORT = process.env.PORT || 3000;
const WIDTH = 100;
const HEIGHT = 50;

// 生成随机字符串
const randomString = () => {
  const CHARACTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  let result = '';
  for (let i = 0; i < 6; i++) {
    result += CHARACTERS.charAt(Math.floor(Math.random() * CHARACTERS.length));
  }
  return result;
};

// 生成验证码图片
const generateCaptcha = () => {
  const canvas = Canvas.createCanvas(WIDTH, HEIGHT);
  const ctx = canvas.getContext('2d');
  const captcha = randomString();
  ctx.clearRect(0, 0, WIDTH, HEIGHT);
  ctx.font = 'bold 25px sans-serif';
  ctx.fillStyle = '#333';
  ctx.fillText(captcha, 20, 35);
  return { captcha, dataURL: canvas.toDataURL() };
};

// 初始化缓存
const cache = {};

app.use(express.static('public'));

// 根路由返回验证码图片
app.get('/', (req, res) => {
  const captcha = generateCaptcha();
  cache[captcha.captcha] = true;
  res.send(`<img src="${captcha.dataURL}">`);
});

// 验证码验证路由
app.get('/captcha', (req, res) => {
  const { captcha } = req.query;
  if (captcha && cache[captcha]) {
    delete cache[captcha];
    res.send({ success: true });
  } else {
    res.send({ success: false });
  }
});

// 发送邮件路由
app.get('/email', (req, res) => {
  const { email } = req.query;
  if (email) {
    const captcha = generateCaptcha();
    cache[captcha.captcha] = email;
    const transporter = nodemailer.createTransport({
      host: 'smtp.ethereal.email',
      port: 587,
      secure: false,
      auth: {
        user: testAccount.user,
        pass: testAccount.pass
      }
    });
    const message = {
      from: 'nodejs-captcha@example.com',
      to: email,
      subject: '验证码',
      text: captcha.captcha,
      html: `<img src="${captcha.dataURL}">`
    };
    transporter.sendMail(message, (err, info) => {
      if (err) {
        console.log(err);
        res.send({ success: false });
      } else {
        console.log(info);
        res.send({ success: true });
      }
    });
  } else {
    res.send({ success: false });
  }
});

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

Dans cet exemple, nous utilisons la bibliothèque Canvas pour générer une image de code de vérification d'une taille de 100x50. Et utilisez la bibliothèque nodemailer pour envoyer un e-mail à la boîte aux lettres spécifiée, et l'e-mail contient l'image du code de vérification générée. Parallèlement, côté serveur, nous utilisons un cache (un objet JavaScript est utilisé ici) pour stocker temporairement les caractères du code de vérification et l'adresse e-mail ou le résultat de la vérification correspondant. Dans l'itinéraire de vérification du code de vérification, le serveur comparera les caractères du code de vérification saisis par l'utilisateur avec les résultats correspondants dans le cache.

Lorsque l'utilisateur accède à la route racine, le serveur génère une nouvelle image de code de vérification et stocke les caractères du code de vérification sous forme de noms de clé dans le cache pour garantir l'unicité de chaque caractère du code de vérification. L'image du code de vérification générée est ensuite renvoyée directement au navigateur via HTTP. Les utilisateurs peuvent accéder à cet itinéraire pour obtenir l'image du code de vérification même s'ils ne sont pas connectés.

Lorsque l'utilisateur doit effectuer une vérification du code de vérification, le serveur génère automatiquement une nouvelle image du code de vérification et stocke les caractères du code de vérification en tant que nom de clé. L'utilisateur doit saisir ce caractère de code de vérification. Une fois que l'utilisateur a saisi les caractères du code de vérification, le serveur les comparera avec les noms de clé correspondants dans le cache pour déterminer s'ils sont corrects.

Afin d'améliorer la sécurité du service de code de vérification, des algorithmes de génération de code de vérification plus complexes et une logique de vérification plus rigoureuse peuvent être utilisés. Dans le même temps, dans les environnements de production réels, vous devez prêter attention à des détails tels que le nettoyage du cache et la limitation de la fréquence d'accès à l'interface.

En bref, l'utilisation de Node.js est très adaptée à la mise en œuvre de services de code de vérification qui ne nécessitent pas de connexion. L'exemple ci-dessus n'est qu'un petit exemple. Vous pouvez mettre en œuvre des services de code de vérification personnalisés en fonction de vos propres besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Nodejs implémente le Big DataArticle suivant:Nodejs implémente le Big Data