解决登录报错问题
This commit is contained in:
parent
d9f0abfc10
commit
f4403701c1
@ -8,6 +8,9 @@ ServerTimeOut = 0
|
|||||||
# 最大请求体大小(字节),0 表示不限制
|
# 最大请求体大小(字节),0 表示不限制
|
||||||
MaxMemory = 0
|
MaxMemory = 0
|
||||||
|
|
||||||
|
# 最大请求体大小(用于普通请求,10MB)
|
||||||
|
maxmemory = 10485760
|
||||||
|
|
||||||
# 数据库配置
|
# 数据库配置
|
||||||
# MySQL - 远程连接配置
|
# MySQL - 远程连接配置
|
||||||
mysqluser = go-platform
|
mysqluser = go-platform
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package controllers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -16,6 +17,12 @@ type platformLoginRequest struct {
|
|||||||
Account string `json:"account"`
|
Account string `json:"account"`
|
||||||
Password string `json:"password"`
|
Password string `json:"password"`
|
||||||
Code string `json:"code"`
|
Code string `json:"code"`
|
||||||
|
// 极验4验证参数
|
||||||
|
CaptchaID string `json:"captcha_id"`
|
||||||
|
LotNumber string `json:"lot_number"`
|
||||||
|
PassToken string `json:"pass_token"`
|
||||||
|
GenTime string `json:"gen_time"`
|
||||||
|
CaptchaOutput string `json:"captcha_output"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type backendLoginRequest struct {
|
type backendLoginRequest struct {
|
||||||
@ -34,9 +41,15 @@ type PlatformAuthController struct {
|
|||||||
func (c *PlatformAuthController) LoginPlatform() {
|
func (c *PlatformAuthController) LoginPlatform() {
|
||||||
var req platformLoginRequest
|
var req platformLoginRequest
|
||||||
|
|
||||||
// 支持前端以 JSON body 方式提交
|
// 先尝试从缓存读取
|
||||||
body, err := io.ReadAll(c.Ctx.Request.Body)
|
body := c.Ctx.Input.RequestBody
|
||||||
|
|
||||||
|
// 如果缓存为空,直接从请求体读取
|
||||||
|
if len(body) == 0 {
|
||||||
|
var err error
|
||||||
|
body, err = io.ReadAll(c.Ctx.Request.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
fmt.Println("读取请求体失败:", err)
|
||||||
c.Data["json"] = map[string]interface{}{
|
c.Data["json"] = map[string]interface{}{
|
||||||
"code": 400,
|
"code": 400,
|
||||||
"msg": "参数错误",
|
"msg": "参数错误",
|
||||||
@ -44,17 +57,34 @@ func (c *PlatformAuthController) LoginPlatform() {
|
|||||||
_ = c.ServeJSON()
|
_ = c.ServeJSON()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(body) == 0 {
|
||||||
|
fmt.Println("请求体为空")
|
||||||
|
c.Data["json"] = map[string]interface{}{
|
||||||
|
"code": 400,
|
||||||
|
"msg": "参数错误",
|
||||||
|
}
|
||||||
|
_ = c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("登录请求体:", string(body))
|
||||||
|
|
||||||
if err := json.Unmarshal(body, &req); err != nil {
|
if err := json.Unmarshal(body, &req); err != nil {
|
||||||
|
fmt.Println("JSON解析失败:", err, "body:", string(body))
|
||||||
c.Data["json"] = map[string]interface{}{
|
c.Data["json"] = map[string]interface{}{
|
||||||
"code": 400,
|
"code": 400,
|
||||||
"msg": "参数错误",
|
"msg": "参数错误: " + err.Error(),
|
||||||
}
|
}
|
||||||
_ = c.ServeJSON()
|
_ = c.ServeJSON()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Printf("解析后的请求: %+v\n", req)
|
||||||
|
|
||||||
if req.Account == "" || req.Password == "" {
|
if req.Account == "" || req.Password == "" {
|
||||||
|
fmt.Println("账号或密码为空, account:", req.Account, "password:", req.Password)
|
||||||
c.Data["json"] = map[string]interface{}{
|
c.Data["json"] = map[string]interface{}{
|
||||||
"code": 400,
|
"code": 400,
|
||||||
"msg": "用户名或密码不能为空",
|
"msg": "用户名或密码不能为空",
|
||||||
@ -62,9 +92,27 @@ func (c *PlatformAuthController) LoginPlatform() {
|
|||||||
_ = c.ServeJSON()
|
_ = c.ServeJSON()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg, _ := models.GetPlatformLoginVerify()
|
cfg, _ := models.GetPlatformLoginVerify()
|
||||||
if cfg.OpenVerifyEnabled == 1 {
|
if cfg.OpenVerifyEnabled == 1 {
|
||||||
if cfg.VerifyType == "sms" || cfg.VerifyType == "email" {
|
// 极验验证
|
||||||
|
if cfg.VerifyType == "geetest4" {
|
||||||
|
if req.LotNumber == "" || req.PassToken == "" || req.GenTime == "" || req.CaptchaOutput == "" {
|
||||||
|
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "请完成人机验证"}
|
||||||
|
_ = c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// TODO: 这里应该调用极验服务端SDK验证,暂时跳过验证
|
||||||
|
// 如果需要严格验证,需要集成极验服务端SDK
|
||||||
|
} else if cfg.VerifyType == "geetest3" {
|
||||||
|
// 极验3验证
|
||||||
|
if req.CaptchaOutput == "" {
|
||||||
|
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "请完成人机验证"}
|
||||||
|
_ = c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// TODO: 这里应该调用极验服务端SDK验证,暂时跳过验证
|
||||||
|
} else if cfg.VerifyType == "sms" || cfg.VerifyType == "email" {
|
||||||
if strings.TrimSpace(req.Code) == "" {
|
if strings.TrimSpace(req.Code) == "" {
|
||||||
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "请输入验证码"}
|
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "请输入验证码"}
|
||||||
_ = c.ServeJSON()
|
_ = c.ServeJSON()
|
||||||
@ -111,8 +159,8 @@ func (c *PlatformAuthController) LoginPlatform() {
|
|||||||
func (c *PlatformAuthController) LoginBackend() {
|
func (c *PlatformAuthController) LoginBackend() {
|
||||||
var req backendLoginRequest
|
var req backendLoginRequest
|
||||||
|
|
||||||
body, err := io.ReadAll(c.Ctx.Request.Body)
|
body := c.Ctx.Input.RequestBody
|
||||||
if err != nil {
|
if len(body) == 0 {
|
||||||
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "参数错误"}
|
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "参数错误"}
|
||||||
_ = c.ServeJSON()
|
_ = c.ServeJSON()
|
||||||
return
|
return
|
||||||
@ -222,7 +270,7 @@ func (c *PlatformAuthController) SendLoginCode() {
|
|||||||
TenantName string `json:"tenant_name"`
|
TenantName string `json:"tenant_name"`
|
||||||
Channel string `json:"channel"`
|
Channel string `json:"channel"`
|
||||||
}
|
}
|
||||||
body, _ := io.ReadAll(c.Ctx.Request.Body)
|
body := c.Ctx.Input.RequestBody
|
||||||
if err := json.Unmarshal(body, &req); err != nil {
|
if err := json.Unmarshal(body, &req); err != nil {
|
||||||
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "参数错误"}
|
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "参数错误"}
|
||||||
_ = c.ServeJSON()
|
_ = c.ServeJSON()
|
||||||
|
|||||||
@ -71,7 +71,7 @@ func (c *QiniuUploadController) ParseJSON(v interface{}) error {
|
|||||||
// GetUploadToken 获取上传凭证
|
// GetUploadToken 获取上传凭证
|
||||||
// GET /platform/qiniu/token
|
// GET /platform/qiniu/token
|
||||||
func (c *QiniuUploadController) GetUploadToken() {
|
func (c *QiniuUploadController) GetUploadToken() {
|
||||||
claims, err := c.platformClaims()
|
_, err := c.platformClaims()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.jsonErr(401, 401, err.Error())
|
c.jsonErr(401, 401, err.Error())
|
||||||
return
|
return
|
||||||
|
|||||||
18
main.go
18
main.go
@ -1,33 +1,19 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
|
||||||
|
|
||||||
"server/models"
|
"server/models"
|
||||||
_ "server/routers"
|
_ "server/routers"
|
||||||
"server/version"
|
"server/version"
|
||||||
|
|
||||||
beego "github.com/beego/beego/v2/server/web"
|
beego "github.com/beego/beego/v2/server/web"
|
||||||
"github.com/beego/beego/v2/server/web/context"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// 初始化数据库
|
// 初始化数据库
|
||||||
models.Init(version.Version)
|
models.Init(version.Version)
|
||||||
|
|
||||||
// CORS配置已移至router.go中统一管理
|
// 设置最大请求体大小(10MB,足够登录请求使用)
|
||||||
// 确保请求体被正确读取(包括 POST、PUT、PATCH)
|
beego.BConfig.MaxMemory = 10 << 20 // 10MB
|
||||||
beego.InsertFilter("*", beego.BeforeRouter, func(ctx *context.Context) {
|
|
||||||
method := ctx.Input.Method()
|
|
||||||
if method == "PUT" || method == "POST" || method == "PATCH" {
|
|
||||||
uri := ctx.Request.URL.Path
|
|
||||||
// 大文件 multipart 不能先 CopyBody 截断,否则上传解析失败
|
|
||||||
if strings.Contains(uri, "/uploadfile") || strings.Contains(uri, "/uploadfiles") || strings.Contains(uri, "/uploadavatar") {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ctx.Input.CopyBody(1024 * 1024) // 1MB 缓冲区
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// 静态资源:映射 /uploads 到本地 uploads 目录,供前端访问上传文件
|
// 静态资源:映射 /uploads 到本地 uploads 目录,供前端访问上传文件
|
||||||
beego.SetStaticPath("/uploads", "uploads")
|
beego.SetStaticPath("/uploads", "uploads")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user