mirror of
				https://github.com/bufanyun/hotgo.git
				synced 2025-11-04 16:23:43 +08:00 
			
		
		
		
	添加验证码选择,可自由选择字符或计算
This commit is contained in:
		
							
								
								
									
										6
									
								
								server/internal/consts/captcha.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								server/internal/consts/captcha.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
package consts
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	CaptchaTypeString = iota + 1 // 字符串
 | 
			
		||||
	CaptchaTypeMath              // 数字计算
 | 
			
		||||
)
 | 
			
		||||
@@ -95,7 +95,11 @@ func (c *cSite) LoginConfig(ctx context.Context, _ *common.SiteLoginConfigReq) (
 | 
			
		||||
 | 
			
		||||
// Captcha 登录验证码
 | 
			
		||||
func (c *cSite) Captcha(ctx context.Context, _ *common.LoginCaptchaReq) (res *common.LoginCaptchaRes, err error) {
 | 
			
		||||
	cid, base64 := captcha.Generate(ctx)
 | 
			
		||||
	loginConf, err := service.SysConfig().GetLogin(ctx)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	cid, base64 := captcha.Generate(ctx, loginConf.CaptchaType)
 | 
			
		||||
	res = &common.LoginCaptchaRes{Cid: cid, Base64: base64}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ package captcha
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"hotgo/internal/consts"
 | 
			
		||||
	"image/color"
 | 
			
		||||
 | 
			
		||||
	"github.com/gogf/gf/v2/frame/g"
 | 
			
		||||
@@ -18,44 +19,52 @@ import (
 | 
			
		||||
var store = base64Captcha.DefaultMemStore
 | 
			
		||||
 | 
			
		||||
// Generate 生成验证码
 | 
			
		||||
func Generate(ctx context.Context) (id string, base64 string) {
 | 
			
		||||
	// 字符
 | 
			
		||||
	//	driver := &base64Captcha.DriverString{
 | 
			
		||||
	//		Height: 42,
 | 
			
		||||
	//		Width:  100,
 | 
			
		||||
	//		//NoiseCount:      50,
 | 
			
		||||
	//		//ShowLineOptions: 20,
 | 
			
		||||
	//		Length: 4,
 | 
			
		||||
	//		BgColor: &color.RGBA{
 | 
			
		||||
	//			R: 255,
 | 
			
		||||
	//			G: 250,
 | 
			
		||||
	//			B: 250,
 | 
			
		||||
	//			A: 250,
 | 
			
		||||
	//		},
 | 
			
		||||
	//		Source: "0123456789", // abcdefghjkmnpqrstuvwxyz23456789
 | 
			
		||||
	//		Fonts:  []string{"chromohv.ttf"},
 | 
			
		||||
	//	}
 | 
			
		||||
func Generate(ctx context.Context, captchaType int) (id string, base64 string) {
 | 
			
		||||
	var err error
 | 
			
		||||
 | 
			
		||||
	switch captchaType {
 | 
			
		||||
	// 算数
 | 
			
		||||
	driver := &base64Captcha.DriverMath{
 | 
			
		||||
		Height:          42,
 | 
			
		||||
		Width:           100,
 | 
			
		||||
		NoiseCount:      0,
 | 
			
		||||
		ShowLineOptions: 0,
 | 
			
		||||
		BgColor: &color.RGBA{
 | 
			
		||||
			R: 255,
 | 
			
		||||
			G: 250,
 | 
			
		||||
			B: 250,
 | 
			
		||||
			A: 250,
 | 
			
		||||
		},
 | 
			
		||||
		Fonts: []string{"chromohv.ttf"},
 | 
			
		||||
	case consts.CaptchaTypeMath:
 | 
			
		||||
		driver := &base64Captcha.DriverMath{
 | 
			
		||||
			Height:          42,
 | 
			
		||||
			Width:           100,
 | 
			
		||||
			NoiseCount:      0,
 | 
			
		||||
			ShowLineOptions: 0,
 | 
			
		||||
			BgColor: &color.RGBA{
 | 
			
		||||
				R: 255,
 | 
			
		||||
				G: 250,
 | 
			
		||||
				B: 250,
 | 
			
		||||
				A: 250,
 | 
			
		||||
			},
 | 
			
		||||
			Fonts: []string{"chromohv.ttf"},
 | 
			
		||||
		}
 | 
			
		||||
		c := base64Captcha.NewCaptcha(driver.ConvertFonts(), store)
 | 
			
		||||
		id, base64, _, err = c.Generate()
 | 
			
		||||
	// 字符
 | 
			
		||||
	default:
 | 
			
		||||
		driver := &base64Captcha.DriverString{
 | 
			
		||||
			Height: 42,
 | 
			
		||||
			Width:  100,
 | 
			
		||||
			//NoiseCount:      50,
 | 
			
		||||
			//ShowLineOptions: 20,
 | 
			
		||||
			Length: 4,
 | 
			
		||||
			BgColor: &color.RGBA{
 | 
			
		||||
				R: 255,
 | 
			
		||||
				G: 250,
 | 
			
		||||
				B: 250,
 | 
			
		||||
				A: 250,
 | 
			
		||||
			},
 | 
			
		||||
			Source: "abcdefghjkmnpqrstuvwxyz23456789", // abcdefghjkmnpqrstuvwxyz23456789
 | 
			
		||||
			Fonts:  []string{"chromohv.ttf"},
 | 
			
		||||
		}
 | 
			
		||||
		c := base64Captcha.NewCaptcha(driver.ConvertFonts(), store)
 | 
			
		||||
		id, base64, _, err = c.Generate()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	c := base64Captcha.NewCaptcha(driver.ConvertFonts(), store)
 | 
			
		||||
	id, base64, _, err := c.Generate()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		g.Log().Errorf(ctx, "captcha.Generate err:%+v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -176,6 +176,7 @@ type WechatConfig struct {
 | 
			
		||||
type LoginConfig struct {
 | 
			
		||||
	RegisterSwitch int     `json:"loginRegisterSwitch"`
 | 
			
		||||
	CaptchaSwitch  int     `json:"loginCaptchaSwitch"`
 | 
			
		||||
	CaptchaType    int     `json:"loginCaptchaType"`
 | 
			
		||||
	Avatar         string  `json:"loginAvatar"`
 | 
			
		||||
	RoleId         int64   `json:"loginRoleId"`
 | 
			
		||||
	DeptId         int64   `json:"loginDeptId"`
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user