From ad6da0d32027f9c2fb337f9b65db9f6379f3b791 Mon Sep 17 00:00:00 2001 From: RockYang Date: Wed, 14 Aug 2024 15:56:50 +0800 Subject: [PATCH] add bind mobile, bind email, bind wechat function is ready --- api/handler/user_handler.go | 100 ++++++++++++++++++----- api/main.go | 3 +- web/src/assets/iconfont/iconfont.css | 14 +++- web/src/assets/iconfont/iconfont.js | 2 +- web/src/assets/iconfont/iconfont.json | 14 ++++ web/src/assets/iconfont/iconfont.ttf | Bin 27748 -> 28060 bytes web/src/assets/iconfont/iconfont.woff | Bin 18496 -> 18696 bytes web/src/assets/iconfont/iconfont.woff2 | Bin 16108 -> 16268 bytes web/src/components/BindEmail.vue | 108 +++++++++++++++++++++++++ web/src/components/BindMobile.vue | 47 ++++++----- web/src/components/LoginDialog.vue | 7 +- web/src/components/RedeemVerify.vue | 1 - web/src/components/SendMsg.vue | 2 +- web/src/components/ThirdLogin.vue | 93 +++++++++++++++++++++ web/src/store/system.js | 9 +++ web/src/views/Login.vue | 2 +- web/src/views/LoginCallback.vue | 26 ++++-- web/src/views/Member.vue | 23 ++++-- 18 files changed, 386 insertions(+), 65 deletions(-) create mode 100644 web/src/components/BindEmail.vue create mode 100644 web/src/components/ThirdLogin.vue diff --git a/api/handler/user_handler.go b/api/handler/user_handler.go index ac9cc240..de96c80e 100644 --- a/api/handler/user_handler.go +++ b/api/handler/user_handler.go @@ -329,8 +329,10 @@ func (h *UserHandler) CLogin(c *gin.Context) { // CLoginCallback 第三方登录回调 func (h *UserHandler) CLoginCallback(c *gin.Context) { - loginType := h.GetTrim(c, "login_type") - code := h.GetTrim(c, "code") + loginType := c.Query("login_type") + code := c.Query("code") + userId := h.GetInt(c, "user_id", 0) + action := c.Query("action") var res types.BizVo apiURL := fmt.Sprintf("%s/api/clogin/info", h.App.Config.ApiConfig.ApiURL) @@ -355,11 +357,34 @@ func (h *UserHandler) CLoginCallback(c *gin.Context) { // login successfully data := res.Data.(map[string]interface{}) - session := gin.H{} var user model.User - tx := h.DB.Debug().Where("openid", data["openid"]).First(&user) - if tx.Error != nil { // user not exist, create new user - // 检测最大注册人数 + if action == "bind" && userId > 0 { + err = h.DB.Where("openid", data["openid"]).First(&user).Error + if err == nil { + resp.ERROR(c, "该微信已经绑定其他账号,请先解绑") + return + } + + err = h.DB.Where("id", userId).First(&user).Error + if err != nil { + resp.ERROR(c, "绑定用户不存在") + return + } + + err = h.DB.Model(&user).UpdateColumn("openid", data["openid"]).Error + if err != nil { + resp.ERROR(c, "更新用户信息失败,"+err.Error()) + return + } + + resp.SUCCESS(c, gin.H{"token": ""}) + return + } + + session := gin.H{} + tx := h.DB.Where("openid", data["openid"]).First(&user) + if tx.Error != nil { + // create new user var totalUser int64 h.DB.Model(&model.User{}).Count(&totalUser) if h.licenseService.GetLicense().Configs.UserNum > 0 && int(totalUser) >= h.licenseService.GetLicense().Configs.UserNum { @@ -534,7 +559,7 @@ func (h *UserHandler) UpdatePass(c *gin.Context) { resp.SUCCESS(c) } -// ResetPass 重置密码 +// ResetPass 找回密码 func (h *UserHandler) ResetPass(c *gin.Context) { var data struct { Username string `json:"username"` @@ -572,11 +597,11 @@ func (h *UserHandler) ResetPass(c *gin.Context) { } } -// BindUsername 重置账号 -func (h *UserHandler) BindUsername(c *gin.Context) { +// BindMobile 绑定手机号 +func (h *UserHandler) BindMobile(c *gin.Context) { var data struct { - Username string `json:"username"` - Code string `json:"code"` + Mobile string `json:"mobile"` + Code string `json:"code"` } if err := c.ShouldBindJSON(&data); err != nil { resp.ERROR(c, types.InvalidArgs) @@ -584,7 +609,7 @@ func (h *UserHandler) BindUsername(c *gin.Context) { } // 检查验证码 - key := CodeStorePrefix + data.Username + key := CodeStorePrefix + data.Mobile code, err := h.redis.Get(c, key).Result() if err != nil || code != data.Code { resp.ERROR(c, "验证码错误") @@ -593,19 +618,54 @@ func (h *UserHandler) BindUsername(c *gin.Context) { // 检查手机号是否被其他账号绑定 var item model.User - res := h.DB.Where("username = ?", data.Username).First(&item) + res := h.DB.Where("mobile", data.Mobile).First(&item) if res.Error == nil { - resp.ERROR(c, "该账号已经被其他账号绑定") + resp.ERROR(c, "该手机号已经绑定了其他账号,请更换手机号") return } - user, err := h.GetLoginUser(c) - if err != nil { - resp.NotAuth(c) - return - } + userId := h.GetLoginUserId(c) - err = h.DB.Model(&user).UpdateColumn("username", data.Username).Error + err = h.DB.Model(&item).Where("id", userId).UpdateColumn("mobile", data.Mobile).Error + if err != nil { + resp.ERROR(c, err.Error()) + return + } + + _ = h.redis.Del(c, key) // 删除短信验证码 + resp.SUCCESS(c) +} + +// BindEmail 绑定邮箱 +func (h *UserHandler) BindEmail(c *gin.Context) { + var data struct { + Email string `json:"email"` + Code string `json:"code"` + } + if err := c.ShouldBindJSON(&data); err != nil { + resp.ERROR(c, types.InvalidArgs) + return + } + + // 检查验证码 + key := CodeStorePrefix + data.Email + code, err := h.redis.Get(c, key).Result() + if err != nil || code != data.Code { + resp.ERROR(c, "验证码错误") + return + } + + // 检查手机号是否被其他账号绑定 + var item model.User + res := h.DB.Where("email", data.Email).First(&item) + if res.Error == nil { + resp.ERROR(c, "该邮箱地址已经绑定了其他账号,请更邮箱地址") + return + } + + userId := h.GetLoginUserId(c) + + err = h.DB.Model(&item).Where("id", userId).UpdateColumn("email", data.Email).Error if err != nil { resp.ERROR(c, err.Error()) return diff --git a/api/main.go b/api/main.go index ead2032b..58a428be 100644 --- a/api/main.go +++ b/api/main.go @@ -231,7 +231,8 @@ func main() { group.GET("profile", h.Profile) group.POST("profile/update", h.ProfileUpdate) group.POST("password", h.UpdatePass) - group.POST("bind/username", h.BindUsername) + group.POST("bind/mobile", h.BindMobile) + group.POST("bind/email", h.BindEmail) group.POST("resetPass", h.ResetPass) group.GET("clogin", h.CLogin) group.GET("clogin/callback", h.CLoginCallback) diff --git a/web/src/assets/iconfont/iconfont.css b/web/src/assets/iconfont/iconfont.css index 2c72d0fd..586dc701 100644 --- a/web/src/assets/iconfont/iconfont.css +++ b/web/src/assets/iconfont/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 4125778 */ - src: url('iconfont.woff2?t=1723434190230') format('woff2'), - url('iconfont.woff?t=1723434190230') format('woff'), - url('iconfont.ttf?t=1723434190230') format('truetype'); + src: url('iconfont.woff2?t=1723593727785') format('woff2'), + url('iconfont.woff?t=1723593727785') format('woff'), + url('iconfont.ttf?t=1723593727785') format('truetype'); } .iconfont { @@ -13,6 +13,14 @@ -moz-osx-font-smoothing: grayscale; } +.icon-email:before { + content: "\e670"; +} + +.icon-mobile:before { + content: "\e79a"; +} + .icon-drag:before { content: "\e8ec"; } diff --git a/web/src/assets/iconfont/iconfont.js b/web/src/assets/iconfont/iconfont.js index 8d38c060..886819cf 100644 --- a/web/src/assets/iconfont/iconfont.js +++ b/web/src/assets/iconfont/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_4125778='',function(a){var l=(l=document.getElementsByTagName("script"))[l.length-1],c=l.getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var t,h,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(c&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}t=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(t,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),t()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(i=t,o=a.document,z=!1,p(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,s())})}function s(){z||(z=!0,i())}function p(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(p,50)}s()}}(window); \ No newline at end of file +window._iconfont_svg_string_4125778='',function(a){var l=(l=document.getElementsByTagName("script"))[l.length-1],c=l.getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var t,h,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(c&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}t=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(t,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),t()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(i=t,o=a.document,z=!1,p(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,s())})}function s(){z||(z=!0,i())}function p(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(p,50)}s()}}(window); \ No newline at end of file diff --git a/web/src/assets/iconfont/iconfont.json b/web/src/assets/iconfont/iconfont.json index 5fbfb566..0d177ae5 100644 --- a/web/src/assets/iconfont/iconfont.json +++ b/web/src/assets/iconfont/iconfont.json @@ -5,6 +5,20 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "15838472", + "name": "email", + "font_class": "email", + "unicode": "e670", + "unicode_decimal": 58992 + }, + { + "icon_id": "6151052", + "name": "mobile-alt", + "font_class": "mobile", + "unicode": "e79a", + "unicode_decimal": 59290 + }, { "icon_id": "15617554", "name": "drag", diff --git a/web/src/assets/iconfont/iconfont.ttf b/web/src/assets/iconfont/iconfont.ttf index 887cbd6a24ca7db515cb29a401879dea262a07cf..6e879bd8f69adff317cf1cc134654c4ea36e1e19 100644 GIT binary patch delta 2150 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 diff --git a/web/src/assets/iconfont/iconfont.woff b/web/src/assets/iconfont/iconfont.woff index 79f8c16da438c36babcbc38990bc029405545765..ef68b85ff696645d27cfec892543464f98cafe45 100644 GIT binary patch delta 18279 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 delta 18087 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 CM$BaZ literal 16108 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 yNy`ywTnNqGg_U + +
+
当前已绑定邮箱:{{ email }}
+ + + + + + + + + + + + + + + + +
+ + +
+ + + + + \ No newline at end of file diff --git a/web/src/components/BindMobile.vue b/web/src/components/BindMobile.vue index 9fa4d54e..41eceb3f 100644 --- a/web/src/components/BindMobile.vue +++ b/web/src/components/BindMobile.vue @@ -2,24 +2,24 @@
-
当前已绑手机号:{{ mobile }}
+
当前已绑手机号:{{ mobile }}
- + - + - - + + @@ -37,12 +37,11 @@ diff --git a/web/src/components/LoginDialog.vue b/web/src/components/LoginDialog.vue index c04da964..9c9de180 100644 --- a/web/src/components/LoginDialog.vue +++ b/web/src/components/LoginDialog.vue @@ -66,7 +66,7 @@ @@ -249,6 +249,8 @@ import {arrayContains} from "@/utils/libs"; import {getSystemInfo} from "@/store/cache"; import Captcha from "@/components/Captcha.vue"; import ResetPass from "@/components/ResetPass.vue"; +import {setRoute} from "@/store/system"; +import {useRouter} from "vue-router"; // eslint-disable-next-line no-undef const props = defineProps({ @@ -282,9 +284,10 @@ const emits = defineEmits(['hide', 'success']); const action = ref("login") const enableVerify = ref(false) const showResetPass = ref(false) +const router = useRouter() onMounted(() => { - const returnURL = `${location.protocol}//${location.host}/login/callback` + const returnURL = `${location.protocol}//${location.host}/login/callback?action=login` httpGet("/api/user/clogin?return_url="+returnURL).then(res => { wechatLoginURL.value = res.data.url }).catch(e => { diff --git a/web/src/components/RedeemVerify.vue b/web/src/components/RedeemVerify.vue index 4b173239..a11e4ebe 100644 --- a/web/src/components/RedeemVerify.vue +++ b/web/src/components/RedeemVerify.vue @@ -2,7 +2,6 @@ { canSend.value = false httpPost('/api/sms/code', {receiver: props.receiver, key: data.key, dots: data.dots, x:data.x}).then(() => { showMessageOK('验证码发送成功') - let time = 120 + let time = 60 btnText.value = time const handler = setInterval(() => { time = time - 1 diff --git a/web/src/components/ThirdLogin.vue b/web/src/components/ThirdLogin.vue new file mode 100644 index 00000000..cbfe9a9d --- /dev/null +++ b/web/src/components/ThirdLogin.vue @@ -0,0 +1,93 @@ + + + + + \ No newline at end of file diff --git a/web/src/store/system.js b/web/src/store/system.js index 6b6eee80..2c6c15ae 100644 --- a/web/src/store/system.js +++ b/web/src/store/system.js @@ -6,6 +6,7 @@ // * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ import Storage from "good-storage"; +import {useRouter} from "vue-router"; const MOBILE_THEME = process.env.VUE_APP_KEY_PREFIX + "MOBILE_THEME" const ADMIN_THEME = process.env.VUE_APP_KEY_PREFIX + "ADMIN_THEME" @@ -62,4 +63,12 @@ export function FormatFileSize(bytes) { const sizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; +} + +export function setRoute(path) { + Storage.set(process.env.VUE_APP_KEY_PREFIX + 'ROUTE_',path) +} + +export function getRoute() { + return Storage.get(process.env.VUE_APP_KEY_PREFIX + 'ROUTE_') } \ No newline at end of file diff --git a/web/src/views/Login.vue b/web/src/views/Login.vue index 6545274a..fea058da 100644 --- a/web/src/views/Login.vue +++ b/web/src/views/Login.vue @@ -114,7 +114,7 @@ onMounted(() => { }).catch(() => { }) - const returnURL = `${location.protocol}//${location.host}/login/callback` + const returnURL = `${location.protocol}//${location.host}/login/callback?action=login` httpGet("/api/user/clogin?return_url="+returnURL).then(res => { wechatLoginURL.value = res.data.url }).catch(e => { diff --git a/web/src/views/LoginCallback.vue b/web/src/views/LoginCallback.vue index d6d4573b..3d089a26 100644 --- a/web/src/views/LoginCallback.vue +++ b/web/src/views/LoginCallback.vue @@ -39,9 +39,10 @@ import {useRouter} from "vue-router" import {ElMessage, ElMessageBox} from "element-plus"; import {httpGet} from "@/utils/http"; import {setUserToken} from "@/store/session"; -import {isMobile} from "@/utils/libs"; import Clipboard from "clipboard"; import {showMessageError, showMessageOK} from "@/utils/dialog"; +import {getRoute} from "@/store/system"; +import {checkSession, removeUserInfo} from "@/store/cache"; const winHeight = ref(window.innerHeight) const loading = ref(true) @@ -52,12 +53,25 @@ const password = ref('') const code = router.currentRoute.value.query.code +const action = router.currentRoute.value.query.action if (code === "") { ElMessage.error({message: "登录失败:code 参数不能为空",duration: 2000, onClose: () => router.push("/")}) } else { + checkSession().then(user => { + // bind user + doLogin(user.id) + }).catch(() => { + doLogin(0) + }) +} + +const doLogin = (userId) => { // 发送请求获取用户信息 - httpGet("/api/user/clogin/callback",{login_type: "wx",code: code}).then(res => { - setUserToken(res.data.token) + httpGet("/api/user/clogin/callback",{login_type: "wx",code: code, action:action, user_id: userId}).then(res => { + removeUserInfo() + if (res.data.token) { + setUserToken(res.data.token) + } if (res.data.username) { username.value = res.data.username password.value = res.data.password @@ -96,11 +110,7 @@ onUnmounted(() => { const finishLogin = () => { show.value = false - if (isMobile()) { - router.push('/mobile') - } else { - router.push('/chat') - } + router.push(getRoute()) } diff --git a/web/src/views/Member.vue b/web/src/views/Member.vue index 3a1475f4..fcf359f9 100644 --- a/web/src/views/Member.vue +++ b/web/src/views/Member.vue @@ -7,13 +7,19 @@ - 修改密码 + 绑定邮箱 绑定手机 + + 第三方登录 + + + 修改密码 + - 兑换码核销 + 卡密兑换 @@ -95,6 +101,9 @@ + + +