Files
neo-blog/internal/middleware/captcha.go

38 lines
1.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package middleware
import (
"context"
"github.com/cloudwego/hertz/pkg/app"
"github.com/sirupsen/logrus"
"github.com/snowykami/neo-blog/pkg/resps"
"github.com/snowykami/neo-blog/pkg/utils"
)
// UseCaptcha 中间件函数用于X-Captcha-Token验证码
func UseCaptcha() app.HandlerFunc {
captchaConfig := utils.Captcha.GetCaptchaConfigFromEnv()
return func(ctx context.Context, c *app.RequestContext) {
CaptchaToken := string(c.GetHeader("X-Captcha-Token"))
if utils.IsDevMode && CaptchaToken == utils.Env.Get("CAPTCHA_DEV_PASSCODE", "dev_passcode") {
// 开发模式直接通过密钥
c.Next(ctx)
return
}
ok, err := utils.Captcha.VerifyCaptcha(captchaConfig, CaptchaToken)
if err != nil {
logrus.Error("Captcha verification error:", err)
resps.InternalServerError(c, "Captcha verification failed")
c.Abort()
return
}
if !ok {
logrus.Warn("Captcha verification failed for token:", CaptchaToken)
resps.Forbidden(c, "Captcha verification failed")
c.Abort()
return
}
c.Next(ctx) // 如果验证码验证成功,则继续下一个处理程序
return
}
}