Files
devstar-create-from-template/routers/web/user/setting/wechat.go
2025-08-25 15:46:12 +08:00

49 lines
1.5 KiB
Go

package setting
import (
wechat_model "code.gitea.io/gitea/models/wechat"
"code.gitea.io/gitea/modules/log"
context "code.gitea.io/gitea/services/context"
wechat_service "code.gitea.io/gitea/services/wechat"
)
// BindWechatQR 将二维码扫描人 OpenID 关联到数据库用户中
func BindWechatQR(ctx *context.Context) {
// 1. 取出 微信公众号二维码 ticket
ticket := ctx.Base.Req.URL.Query().Get("ticket")
// 2. 取出用户openid并清空对应的ticket
qrStatus, err := wechat_service.GetWechatQrStatusByTicket(ticket)
if err != nil {
log.Error("绑定微信失败: " + err.Error())
ctx.Flash.Error("绑定微信失败:" + err.Error())
ctx.Redirect("/user/settings/account")
return
}
defer wechat_service.DeleteWechatQrByTicket(ticket)
// 3. 从 Gitea Web Context 中获取用户信息
user := ctx.Doer
// 4. 更新数据库 `user_wechat_openid`
err = wechat_model.UpdateOrCreateWechatUser(ctx, user, qrStatus.OpenId)
if err != nil {
log.Error("绑定微信失败: " + err.Error())
ctx.Flash.Error("绑定微信失败: " + err.Error())
ctx.Redirect("/user/settings/account")
return
}
// 5. 携带扫码成功信息,重定向回用户修改信息页面
ctx.Data["wechatQRScanSuccess"] = true
Account(ctx)
}
// UnbindWechatQR 解绑微信
func UnbindWechatQR(ctx *context.Context) {
_ = wechat_model.DeleteWechatUser(ctx, ctx.Doer)
ctx.Flash.Success(ctx.Tr("settings.wechat_unbind_success"))
ctx.Redirect("/user/settings/account")
}