Maison  >  Article  >  développement back-end  >  Exemples d'utilisation du code de vérification dans le framework Gin

Exemples d'utilisation du code de vérification dans le framework Gin

PHPz
PHPzoriginal
2023-06-23 08:10:451825parcourir

Avec la popularisation d'Internet, les codes de vérification sont devenus un processus nécessaire pour la connexion, l'enregistrement, la récupération du mot de passe et d'autres opérations. Dans le framework Gin, implémenter la fonction de code de vérification est devenu extrêmement simple.

Cet article expliquera comment utiliser une bibliothèque tierce pour implémenter la fonction de code de vérification dans le framework Gin et fournira un exemple de code pour référence aux lecteurs.

1. Installer les bibliothèques dépendantes

Avant d'utiliser le code de vérification, nous devons installer une bibliothèque tierce goCaptcha.

Pour installer goCaptcha, vous pouvez utiliser la commande go get :

$ go get -u github.com/mojocn/base64Captcha

2. Générer un code de vérification

goCaptcha fournit trois types de code de vérification, dont un code de vérification numérique, un code de vérification alphabétique et un code de vérification alphanumérique mixte. Ensuite, nous prendrons le code de vérification numérique comme exemple pour montrer comment générer le code de vérification.

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    b64 "github.com/mojocn/base64Captcha"
)

func main() {
    // 以下是生成验证码的代码
    driver := b64.NewDriverDigit(80, 240, 6, 0.7, 80)
    captcha := b64.NewCaptcha(driver, b64.DefaultMemStore)
    id, b64s, err := captcha.Generate()
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Println(id, b64s)
}

Dans le code ci-dessus, nous utilisons la fonction NewDriverDigit pour créer un générateur de code de vérification. Les paramètres de la fonction représentent successivement la largeur de l'image, la hauteur, la longueur du code de vérification, l'intensité du bruit et le nombre de lignes d'interférence. Ensuite, nous utilisons la fonction NewCaptcha pour créer un objet code de vérification et appelons la méthode Generate pour générer le code de vérification.

3. Envoyer le code de vérification au client

Après avoir généré le code de vérification, nous devons l'envoyer au client. Dans le framework Gin, vous pouvez utiliser la fonction ResponseWriter.Write pour écrire le corps de la réponse.

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    b64 "github.com/mojocn/base64Captcha"
)

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

    // 以下是生成验证码的代码
    driver := b64.NewDriverDigit(80, 240, 6, 0.7, 80)
    captcha := b64.NewCaptcha(driver, b64.DefaultMemStore)
    router.GET("/captcha", func(c *gin.Context) {
        id, b64s, err := captcha.Generate()
        if err != nil {
            fmt.Println(err.Error())
            c.String(500, err.Error())
            return
        }
        c.SetCookie("captcha_id", id, 300, "/", "localhost", false, true)
        c.Data(200, "image/png", []byte(b64s))
    })

    router.Run(":8080")
}

Dans le code ci-dessus, nous avons créé une route /captcha, transmis l'ID du code de vérification via la méthode SetCookie et écrit le code de vérification de texte généré dans le corps de la réponse via l'objet ResponseWriter.

4. Vérifiez le code de vérification

Lorsque l'utilisateur saisit le code de vérification dans le formulaire et le soumet, nous devons obtenir le code de vérification via l'ID du code de vérification et vérifier son exactitude. Dans Go, nous pouvons utiliser les objets MemStore pour stocker et récupérer les codes de vérification.

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    b64 "github.com/mojocn/base64Captcha"
)

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

    // 以下是生成验证码的代码
    driver := b64.NewDriverDigit(80, 240, 6, 0.7, 80)
    captcha := b64.NewCaptcha(driver, b64.DefaultMemStore)
    router.GET("/captcha", func(c *gin.Context) {
        id, b64s, err := captcha.Generate()
        if err != nil {
            fmt.Println(err.Error())
            c.String(500, err.Error())
            return
        }
        c.SetCookie("captcha_id", id, 300, "/", "localhost", false, true)
        c.Data(200, "image/png", []byte(b64s))
    })

    // 以下是验证验证码的代码
    router.POST("/login", func(c *gin.Context) {
        captchaId, err := c.Cookie("captcha_id")
        if err != nil {
            fmt.Println(err.Error())
            c.String(400, "未生成验证码")
            return
        }
        captchaVal := c.PostForm("captcha_val")
        if captchaVal == "" {
            c.String(400, "请输入验证码")
            return
        }
        if !captcha.Verify(captchaId, captchaVal) {
            c.String(400, "验证码错误")
            return
        }
        c.String(200, "登录成功")
    })

    router.Run(":8080")
}

Dans le code ci-dessus, nous avons créé une route /login, qui obtient d'abord l'ID du code de vérification via Cookie, puis obtient le code de vérification saisi par l'utilisateur via PostForm, et enfin utilise la méthode Verify de l'objet code de vérification pour vérifier l'exactitude du code de vérification.

5. Résumé

Cet article présente comment utiliser goCaptcha pour implémenter la fonction de code de vérification dans le framework Gin. Générez d'abord le générateur de code de vérification via la fonction NewDriverDigit, puis utilisez la fonction NewCaptcha pour créer l'objet de code de vérification et utilisez la méthode Generate pour générer le code de vérification. Enfin, le code de vérification est envoyé au client via ResponseWriter, l'ID du code de vérification est transmis via Cookie, l'objet MemStore est utilisé pour stocker le code de vérification et l'exactitude du code de vérification est vérifiée lors de la connexion.

En développement réel, nous pouvons personnaliser divers paramètres du code de vérification en fonction des besoins et le combiner avec d'autres fonctions pour offrir aux utilisateurs une expérience fonctionnelle plus riche.

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