主要更新uniapp相关功能

This commit is contained in:
hero920103 committed 2026-10-07 00:59:05 +08:00
1 parent aa92ca40a2
commit 5b4dbb2b46
65 files changed
+8532 -1921

No files matched your search

+12 -9
View File
@@ -108,15 +108,18 @@ func (c *AuthLoginController) LoginSubmit() {
}
// 开启人机验证时:先极验通过,再走账号密码校验
if err := authsvc.VerifyLoginCaptcha(0, authsvc.CaptchaResult{
CaptchaID: req.CaptchaID,
LotNumber: req.LotNumber,
PassToken: req.PassToken,
GenTime: req.GenTime,
CaptchaOutput: req.CaptchaOutput,
}); err != nil {
c.serveJSON(map[string]interface{}{"code": 400, "msg": err.Error()})
return
// 小程序端(yz-miniapp)无法集成极验 SDK 且运行于微信沙箱内,跳过人机验证
if strings.TrimSpace(req.ClientID) != "yz-miniapp" {
if err := authsvc.VerifyLoginCaptcha(0, authsvc.CaptchaResult{
CaptchaID: req.CaptchaID,
LotNumber: req.LotNumber,
PassToken: req.PassToken,
GenTime: req.GenTime,
CaptchaOutput: req.CaptchaOutput,
}); err != nil {
c.serveJSON(map[string]interface{}{"code": 400, "msg": err.Error()})
return
}
}
clientIP := c.Ctx.Input.IP()
+53
View File
@@ -177,6 +177,59 @@ func (c *AuthWechatMiniController) Login() {
c.serveJSON(resp)
}
// Bind 把当前小程序 openid 绑定到已登录身份
// POST /auth/wechat/miniapp/bind { "code": "wx.login的code" } Header: Bearer 令牌
//
// 用途:小程序认证中 / 未开通「手机号快速验证」时,getPhoneNumber 拿不到手机号,
// 一键登录退化为「按 openid 匹配已绑定身份」。用户先用账号密码登录一次,
// 前端调用本接口静默绑定 openid,之后即可无手机号完成微信一键登录。
// 显式绑定视为本人操作(同时持有微信与该账号登录态),允许换绑覆盖旧绑定。
func (c *AuthWechatMiniController) Bind() {
claims := claimsFromCtxThird(c.Ctx)
if claims == nil || claims.UserID <= 0 {
c.Ctx.Output.SetStatus(401)
c.serveJSON(map[string]interface{}{"code": 401, "msg": "未登录"})
return
}
var req struct {
Code string `json:"code"`
}
body := c.Ctx.Input.RequestBody
if len(body) == 0 {
body, _ = io.ReadAll(c.Ctx.Request.Body)
}
if err := json.Unmarshal(body, &req); err != nil {
c.fail("", 400, "参数错误")
return
}
req.Code = strings.TrimSpace(req.Code)
if req.Code == "" {
c.fail("", 400, "缺少登录凭证,请重新进入小程序")
return
}
cfg, err := wechatmini.LoadEnabledConfig()
if err != nil {
c.fail(MiniReasonNotConfigured, 400, "小程序登录未开通")
return
}
session, err := wechatmini.Code2Session(cfg, req.Code)
if err != nil {
msg := err.Error()
if hint, ok := wechatmini.ExplainError(err); ok {
msg = hint
}
logs.Warn("[wechat-mini] 绑定 code 换取 openid 失败: %v", err)
c.fail(MiniReasonWechatAPI, 400, msg)
return
}
c.syncBinding(cfg, uint64(claims.UserID), session, true)
c.serveJSON(map[string]interface{}{"code": 200, "msg": "绑定成功"})
}
// resolveIdentity 定位身份并维护小程序绑定关系。
// mobile 非空表示本次已通过微信手机号验证,是可信的强证据,优先采用。
func (c *AuthWechatMiniController) resolveIdentity(cfg *wechatmini.Config, mobile string, session *wechatmini.Session) (*models.AuthIdentity, error) {