Dengan perkembangan Internet, kod pengesahan semakin menjadi ukuran pengesahan keselamatan yang biasa untuk tapak web dan aplikasi. Kod pengesahan ialah teknologi interaksi manusia-komputer berdasarkan imej, bunyi, teks, dsb., dengan tujuan untuk mencegah serangan berniat jahat dan penyalahgunaan oleh robot.
Dalam artikel ini, kami akan memperkenalkan cara menggunakan rangka kerja Gin bagi bahasa Go untuk melaksanakan fungsi penjanaan dan pengesahan kod pengesahan. Gin ialah rangka kerja web ringan yang boleh membina aplikasi API dan WEB yang RESTful dengan cepat.
Sebelum kita mula, kita perlu memasang rangka kerja Gin. Anda boleh menggunakan alat baris arahan Go untuk memasang:
go get -u github.com/gin-gonic/gin
Untuk menjana imej kod pengesahan, kita perlu menggunakan perpustakaan pihak ketiga github.com/mojocn /base64Captcha. Pustaka menyediakan berbilang jenis kod pengesahan dan menyokong parameter tersuai. Berikut ialah contoh kod untuk menjana kod pengesahan imej:
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") }
Dalam contoh ini, kami menggunakan storan Memeory lalai untuk menyimpan maklumat kod pengesahan (storan lain seperti Redis juga boleh digunakan). Pemacu CAPTCHA berasaskan nombor mencipta CAPTCHA menggunakan lebar 80 piksel, ketinggian 240 piksel, panjang empat aksara dan intensiti hingar 0.5. Kaedah Jana akan mengembalikan ID kod pengesahan yang dijana, imej kod pengesahan dan maklumat ralat. Di sini, kami mengembalikan imej kod pengesahan kepada klien dalam bentuk yang dikodkan base64, dan menentukan masa tamat tempoh dalam respons.
Apabila pelanggan menyerahkan kod pengesahan, ia perlu disahkan sama ada input pengguna sepadan dengan kod pengesahan yang dijana. Masih menggunakan fungsi Sahkan yang disediakan oleh perpustakaan github.com/mojocn/base64Captcha untuk mengesahkan kod pengesahan. Berikut ialah contoh kod untuk mengesahkan captcha imej:
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") }
Dalam contoh ini, kami mentakrifkan struktur untuk menyimpan ID captcha dan nilai captcha yang diserahkan daripada klien. Gunakan fungsi ShouldBind untuk mengikat badan permintaan kepada struktur. Jika pengikatan gagal, ralat 400 dikembalikan. Semasa mengesahkan kod pengesahan, anda boleh menggunakan fungsi VerifyCaptcha untuk mengesahkan sama ada nilai kod pengesahan yang diserahkan oleh pelanggan adalah betul. Jika pengesahan berjaya, jawapan 200 dikembalikan jika tidak, ralat 401 dikembalikan dan sebab ralat kod pengesahan digesa.
Menggabungkan kod sampel di atas untuk menjana kod pengesahan dan mengesahkan kod pengesahan, kami boleh mendapatkan kod lengkap, seperti yang ditunjukkan di bawah:
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") }
Artikel ini memperkenalkan cara menggunakan rangka kerja Gin dan perpustakaan github.com/mojocn/base64Captcha untuk melaksanakan fungsi penjanaan dan pengesahan kod pengesahan. Teknologi kod pengesahan ialah kaedah pengesahan keselamatan yang digunakan secara meluas, yang boleh menghalang serangan robot dan penyalahgunaan berniat jahat dengan berkesan. Dalam amalan, jenis kod pengesahan lain dan kaedah penyimpanan juga boleh dipilih mengikut keperluan sebenar, dan digabungkan dengan langkah keselamatan lain untuk meningkatkan keselamatan dan kebolehpercayaan aplikasi.
Atas ialah kandungan terperinci Gunakan rangka kerja Gin untuk melaksanakan penjanaan kod pengesahan dan fungsi pengesahan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!