ホームページ > バックエンド開発 > Golang > Gin フレームワークを使用して検証コードの生成と検証機能を実装する

Gin フレームワークを使用して検証コードの生成と検証機能を実装する

PHPz
リリース: 2023-06-22 12:01:37
オリジナル
1501 人が閲覧しました

インターネットの発展に伴い、Web サイトやアプリケーションのセキュリティ検証手段として検証コードがますます一般的になってきています。検証コードは、ロボットによる悪意のある攻撃や悪用を防ぐことを目的とした、画像、音声、テキストなどに基づく人間とコンピューターの対話技術です。

今回はGo言語のGinフレームワークを使って検証コード生成と検証機能を実装する方法を紹介します。 Gin は、RESTful API および WEB アプリケーションを迅速に構築できる軽量の Web フレームワークです。

  1. Gin フレームワークをインストールする

始める前に、まず Jin フレームワークをインストールする必要があります。 Go コマンド ライン ツールを使用してインストールできます。

go get -u github.com/gin-gonic/gin
ログイン後にコピー
  1. 検証コード生成関数の実装

検証コード イメージを生成するには、サードパーティ ライブラリ github.com/mojocn /base64Captcha。このライブラリは複数の検証コード タイプを提供し、カスタム パラメーターをサポートします。以下は、イメージ検証コードを生成するためのサンプル コードです。

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")
}
ログイン後にコピー

この例では、デフォルトのメモリ ストレージを使用して検証コード情報を保存します (Redis などの他のストレージも使用できます)。数値ベースの CAPTCHA ドライバーは、幅 80 ピクセル、高さ 240 ピクセル、長さ 4 文字、およびノイズ強度 0.5 を使用して CAPTCHA を作成します。 Generate メソッドは、生成された検証コード ID、検証コード イメージ、およびエラー情報を返します。ここでは、検証コード イメージを Base64 エンコード形式でクライアントに返し、応答で有効期限を指定します。

  1. 検証コード検証機能の実装

クライアントが検証コードを送信するとき、ユーザーの入力が生成された検証コードと一致するかどうかを検証する必要があります。引き続き、github.com/mojocn/base64Captcha ライブラリによって提供される Verify 関数を使用して、検証コードを検証します。画像キャプチャを検証するサンプル コードを次に示します。

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")
}
ログイン後にコピー

この例では、クライアントから送信されたキャプチャ ID とキャプチャ値を保存する構造体を定義します。 ShouldBind 関数を使用して、リクエスト本文を構造体にバインドします。バインドが失敗すると、400 エラーが返されます。検証コードを検証する場合、VerifyCaptcha 関数を使用して、クライアントによって送信された検証コードの値が正しいかどうかを検証できます。検証が成功した場合は 200 応答が返され、そうでない場合は 401 エラーが返され、検証コード エラーの理由が求められます。

  1. 完全なコード

検証コードを生成するための上記のコード例と検証コードを検証するためのコードを組み合わせると、以下に示すような完全なコードを取得できます。

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. 概要

この記事では、Gin フレームワークと github.com/mojocn/base64Captcha ライブラリを使用して検証コードの生成と検証機能を実装する方法を紹介します。検証コード技術は広く使用されているセキュリティ検証方法であり、ロボット攻撃や悪意のある悪用を効果的に防止できます。実際には、実際のニーズに基づいて他の検証コードの種類と保存方法を選択し、他のセキュリティ対策と組み合わせてアプリケーションのセキュリティと信頼性を強化できます。

以上がGin フレームワークを使用して検証コードの生成と検証機能を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート