Feat: captcha
This commit is contained in:
parent
c7e47293db
commit
7d4e212d4e
6 changed files with 74 additions and 2 deletions
|
@ -8,4 +8,17 @@ User = root
|
||||||
Password = root
|
Password = root
|
||||||
Host = 127.0.0.1:3306
|
Host = 127.0.0.1:3306
|
||||||
Name = v3
|
Name = v3
|
||||||
TablePrefix = v3_
|
TablePrefix = v3_
|
||||||
|
|
||||||
|
[Captcha]
|
||||||
|
Height = 60
|
||||||
|
Width = 240
|
||||||
|
Mode = NumberAlphabet
|
||||||
|
ComplexOfNoiseText = 0
|
||||||
|
ComplexOfNoiseDot = 0
|
||||||
|
IsShowHollowLine = false
|
||||||
|
IsShowNoiseDot = false
|
||||||
|
IsShowNoiseText = false
|
||||||
|
IsShowSlimeLine = false
|
||||||
|
IsShowSineLine = false
|
||||||
|
CaptchaLen = 6
|
2
go.mod
2
go.mod
|
@ -12,8 +12,8 @@ require (
|
||||||
github.com/jinzhu/gorm v1.9.11
|
github.com/jinzhu/gorm v1.9.11
|
||||||
github.com/leodido/go-urn v1.2.0 // indirect
|
github.com/leodido/go-urn v1.2.0 // indirect
|
||||||
github.com/mcuadros/go-version v0.0.0-20190830083331-035f6764e8d2
|
github.com/mcuadros/go-version v0.0.0-20190830083331-035f6764e8d2
|
||||||
|
github.com/mojocn/base64Captcha v0.0.0-20190801020520-752b1cd608b2
|
||||||
github.com/pkg/errors v0.8.0
|
github.com/pkg/errors v0.8.0
|
||||||
github.com/stretchr/testify v1.4.0
|
github.com/stretchr/testify v1.4.0
|
||||||
gopkg.in/go-playground/validator.v8 v8.18.2
|
gopkg.in/go-playground/validator.v8 v8.18.2
|
||||||
gopkg.in/go-playground/validator.v9 v9.30.0
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -14,6 +14,19 @@ func SetSession(c *gin.Context, list map[string]interface{}) {
|
||||||
s.Save()
|
s.Save()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetSession 获取session
|
||||||
|
func GetSession(c *gin.Context, key string) interface{} {
|
||||||
|
s := sessions.Default(c)
|
||||||
|
return s.Get(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteSession 删除session
|
||||||
|
func DeleteSession(c *gin.Context, key string) {
|
||||||
|
s := sessions.Default(c)
|
||||||
|
s.Delete(key)
|
||||||
|
s.Save()
|
||||||
|
}
|
||||||
|
|
||||||
// ClearSession 清空session
|
// ClearSession 清空session
|
||||||
func ClearSession(c *gin.Context) {
|
func ClearSession(c *gin.Context) {
|
||||||
s := sessions.Default(c)
|
s := sessions.Default(c)
|
||||||
|
|
38
routers/controllers/general.go
Normal file
38
routers/controllers/general.go
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
package controllers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cloudreve/pkg/serializer"
|
||||||
|
"cloudreve/pkg/util"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/mojocn/base64Captcha"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Captcha 获取验证码
|
||||||
|
func Captcha(c *gin.Context) {
|
||||||
|
|
||||||
|
var configD = base64Captcha.ConfigCharacter{
|
||||||
|
Height: 60,
|
||||||
|
Width: 240,
|
||||||
|
//const CaptchaModeNumber:数字,CaptchaModeAlphabet:字母,CaptchaModeArithmetic:算术,CaptchaModeNumberAlphabet:数字字母混合.
|
||||||
|
Mode: base64Captcha.CaptchaModeNumberAlphabet,
|
||||||
|
ComplexOfNoiseText: base64Captcha.CaptchaComplexLower,
|
||||||
|
ComplexOfNoiseDot: base64Captcha.CaptchaComplexLower,
|
||||||
|
IsShowHollowLine: false,
|
||||||
|
IsShowNoiseDot: false,
|
||||||
|
IsShowNoiseText: false,
|
||||||
|
IsShowSlimeLine: false,
|
||||||
|
IsShowSineLine: false,
|
||||||
|
CaptchaLen: 6,
|
||||||
|
}
|
||||||
|
|
||||||
|
idKeyD, capD := base64Captcha.GenerateCaptcha("", configD)
|
||||||
|
util.SetSession(c, map[string]interface{}{
|
||||||
|
"captchaID": idKeyD,
|
||||||
|
})
|
||||||
|
base64stringD := base64Captcha.CaptchaWriteToBase64Encoding(capD)
|
||||||
|
|
||||||
|
c.JSON(200, serializer.Response{
|
||||||
|
Code: 0,
|
||||||
|
Data: base64stringD,
|
||||||
|
})
|
||||||
|
}
|
|
@ -32,6 +32,8 @@ func InitRouter() *gin.Engine {
|
||||||
v3.GET("Ping", controllers.Ping)
|
v3.GET("Ping", controllers.Ping)
|
||||||
// 用户登录
|
// 用户登录
|
||||||
v3.POST("User/Session", controllers.UserLogin)
|
v3.POST("User/Session", controllers.UserLogin)
|
||||||
|
// 验证码
|
||||||
|
v3.GET("Captcha", controllers.Captcha)
|
||||||
|
|
||||||
// 需要登录保护的
|
// 需要登录保护的
|
||||||
auth := v3.Group("")
|
auth := v3.Group("")
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"cloudreve/pkg/util"
|
"cloudreve/pkg/util"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/mojocn/base64Captcha"
|
||||||
)
|
)
|
||||||
|
|
||||||
// UserLoginService 管理用户登录的服务
|
// UserLoginService 管理用户登录的服务
|
||||||
|
@ -23,6 +24,11 @@ func (service *UserLoginService) Login(c *gin.Context) serializer.Response {
|
||||||
|
|
||||||
if model.IsTrueVal(isCaptchaRequired) {
|
if model.IsTrueVal(isCaptchaRequired) {
|
||||||
// TODO 验证码校验
|
// TODO 验证码校验
|
||||||
|
captchaID := util.GetSession(c, "captchaID")
|
||||||
|
if captchaID == nil || !base64Captcha.VerifyCaptcha(captchaID.(string), service.CaptchaCode) {
|
||||||
|
util.DeleteSession(c, "captchaID")
|
||||||
|
return serializer.ParamErr("验证码错误", nil)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 一系列校验
|
// 一系列校验
|
||||||
|
|
Loading…
Reference in a new issue