Maison  >  Article  >  développement back-end  >  Utilisez le framework Gin pour implémenter des fonctions de génération de code de vérification et de vérification

Utilisez le framework Gin pour implémenter des fonctions de génération de code de vérification et de vérification

PHPz
PHPzoriginal
2023-06-22 12:01:371457parcourir

Avec le développement d'Internet, les codes de vérification sont de plus en plus devenus une mesure de vérification de sécurité courante pour les sites Web et les applications. Le code de vérification est une technologie d’interaction homme-machine basée sur des images, des sons, du texte, etc., dans le but de prévenir les attaques malveillantes et les abus des robots.

Dans cet article, nous présenterons comment utiliser le framework Gin du langage Go pour implémenter des fonctions de génération de code de vérification et de vérification. Gin est un framework Web léger qui peut créer rapidement des API RESTful et des applications WEB.

  1. Installer le framework Gin

Avant de commencer, nous devons d'abord installer le framework Gin. Vous pouvez utiliser l'outil de ligne de commande Go pour installer :

go get -u github.com/gin-gonic/gin
  1. Implémentez la fonction de génération de code de vérification

Afin de générer l'image du code de vérification, nous devons utiliser la bibliothèque tierce github.com/mojocn/base64Captcha. La bibliothèque fournit plusieurs types de codes de vérification et prend en charge les paramètres personnalisés. Voici un exemple de code pour générer un code de vérification d'image :

package main

import (
    "fmt"
    "time"

    "github.com/gin-gonic/gin"
    "github.com/mojocn/base64Captcha"
)

func main() {
    r := gin.Default()

    // 生成验证码图片
    r.GET("/captcha", func(c *gin.Context) {
        // 配置
        driver := base64Captcha.NewDriverDigit(80, 240, 4, 0.5, 80)
        store := base64Captcha.DefaultMemStore
        captcha := base64Captcha.NewCaptcha(driver, store)

        // 生成验证码
        id, b64s, err := captcha.Generate()
        if err != nil {
            c.JSON(500, gin.H{"error": err.Error()})
            return
        }

        // 返回验证码图片
        c.JSON(200, gin.H{
            "id":      id,
            "image":   b64s,
            "expires": time.Now().Add(time.Minute * 5).Unix(),
        })
    })

    r.Run(":8080")
}

Dans cet exemple, nous utilisons le stockage Memeory par défaut pour stocker les informations du code de vérification (un autre stockage tel que Redis peut également être utilisé). Le pilote CAPTCHA basé sur des nombres crée des CAPTCHA en utilisant une largeur de 80 pixels, une hauteur de 240 pixels, une longueur de quatre caractères et une intensité de bruit de 0,5. La méthode Generate renverra l’ID du code de vérification généré, l’image du code de vérification et les informations d’erreur. Ici, nous renvoyons l'image du code de vérification au client sous forme codée en base64 et spécifions le délai d'expiration dans la réponse.

  1. Implémentez la fonction de vérification du code de vérification

Lorsque le client soumet le code de vérification, il doit être vérifié si l'entrée de l'utilisateur correspond au code de vérification généré. Utilisez toujours la fonction Verify fournie par la bibliothèque github.com/mojocn/base64Captcha pour vérifier le code de vérification. Voici un exemple de code pour vérifier un captcha d'image :

package main

import (
    "fmt"

    "github.com/gin-gonic/gin"
    "github.com/mojocn/base64Captcha"
)

func main() {
    r := gin.Default()

    // 验证验证码
    r.POST("/verify", func(c *gin.Context) {
        var form struct {
            ID   string `form:"id" binding:"required"`
            Code string `form:"code" binding:"required"`
        }
        if err := c.ShouldBind(&form); err != nil {
            c.JSON(400, gin.H{"error": err.Error()})
            return
        }

        // 验证验证码
        if base64Captcha.VerifyCaptcha(form.ID, form.Code) {
            c.JSON(200, gin.H{"success": true})
        } else {
            c.JSON(401, gin.H{"error": "验证码错误"})
        }
    })

    r.Run(":8080")
}

Dans cet exemple, nous définissons une structure pour stocker l'ID du captcha et la valeur du captcha soumis par le client. Utilisez la fonction ShouldBind pour lier le corps de la requête à la structure. Si la liaison échoue, une erreur 400 est renvoyée. Lors de la vérification du code de vérification, vous pouvez utiliser la fonction VerifyCaptcha pour vérifier si la valeur du code de vérification soumise par le client est correcte. Si la vérification réussit, une réponse 200 est renvoyée ; sinon, une erreur 401 est renvoyée et la raison de l'erreur du code de vérification est demandée.

  1. Code complet

En combinant l'exemple de code ci-dessus pour générer le code de vérification et vérifier le code de vérification, nous pouvons obtenir un code complet comme suit :

package main

import (
    "fmt"
    "time"

    "github.com/gin-gonic/gin"
    "github.com/mojocn/base64Captcha"
)

func main() {
    r := gin.Default()

    // 生成验证码图片
    r.GET("/captcha", func(c *gin.Context) {
        // 配置
        driver := base64Captcha.NewDriverDigit(80, 240, 4, 0.5, 80)
        store := base64Captcha.DefaultMemStore
        captcha := base64Captcha.NewCaptcha(driver, store)

        // 生成验证码
        id, b64s, err := captcha.Generate()
        if err != nil {
            c.JSON(500, gin.H{"error": err.Error()})
            return
        }

        // 返回验证码图片
        c.JSON(200, gin.H{
            "id":      id,
            "image":   b64s,
            "expires": time.Now().Add(time.Minute * 5).Unix(),
        })
    })

    // 验证验证码
    r.POST("/verify", func(c *gin.Context) {
        var form struct {
            ID   string `form:"id" binding:"required"`
            Code string `form:"code" binding:"required"`
        }
        if err := c.ShouldBind(&form); err != nil {
            c.JSON(400, gin.H{"error": err.Error()})
            return
        }

        // 验证验证码
        if base64Captcha.VerifyCaptcha(form.ID, form.Code) {
            c.JSON(200, gin.H{"success": true})
        } else {
            c.JSON(401, gin.H{"error": "验证码错误"})
        }
    })

    r.Run(":8080")
}
  1. Résumé

Cet article présente comment utiliser le framework Gin et github La bibliothèque .com/mojocn/base64Captcha implémente des fonctions de génération et de vérification de code de vérification. La technologie des codes de vérification est une méthode de vérification de sécurité largement utilisée, qui peut prévenir efficacement les attaques de robots et les abus malveillants. En pratique, d'autres types de codes de vérification et méthodes de stockage peuvent être sélectionnés en fonction des besoins réels et combinés avec d'autres mesures de sécurité pour améliorer la sécurité et la fiabilité de l'application.

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