From a2583c05917b9da450c9d76d49fb9986a1f55e35 Mon Sep 17 00:00:00 2001 From: RockYang Date: Tue, 13 Aug 2024 18:40:50 +0800 Subject: [PATCH] add mobile and email filed for user --- api/handler/user_handler.go | 29 ++++++-- api/store/model/user.go | 2 + api/store/vo/user.go | 2 + web/src/assets/css/login.styl | 3 +- web/src/assets/css/member.styl | 2 - .../{ResetAccount.vue => BindMobile.vue} | 35 ++++++---- web/src/components/LoginDialog.vue | 66 +++++++++++-------- web/src/components/ResetPass.vue | 6 +- web/src/components/SendMsg.vue | 12 +++- web/src/views/Login.vue | 4 +- web/src/views/LoginCallback.vue | 25 ++++++- web/src/views/Member.vue | 7 +- web/src/views/Register.vue | 22 +++++-- web/src/views/admin/Users.vue | 4 +- web/vue.config.js | 2 +- 15 files changed, 152 insertions(+), 69 deletions(-) rename web/src/components/{ResetAccount.vue => BindMobile.vue} (73%) diff --git a/api/handler/user_handler.go b/api/handler/user_handler.go index 25127eda..ac9cc240 100644 --- a/api/handler/user_handler.go +++ b/api/handler/user_handler.go @@ -58,6 +58,8 @@ func (h *UserHandler) Register(c *gin.Context) { var data struct { RegWay string `json:"reg_way"` Username string `json:"username"` + Mobile string `json:"mobile"` + Email string `json:"email"` Password string `json:"password"` Code string `json:"code"` InviteCode string `json:"invite_code"` @@ -85,8 +87,15 @@ func (h *UserHandler) Register(c *gin.Context) { // 检查验证码 var key string - if data.RegWay == "email" || data.RegWay == "mobile" { - key = CodeStorePrefix + data.Username + if data.RegWay == "email" { + key = CodeStorePrefix + data.Email + code, err := h.redis.Get(c, key).Result() + if err != nil || code != data.Code { + resp.ERROR(c, "验证码错误") + return + } + } else if data.RegWay == "mobile" { + key = CodeStorePrefix + data.Mobile code, err := h.redis.Get(c, key).Result() if err != nil || code != data.Code { resp.ERROR(c, "验证码错误") @@ -106,7 +115,17 @@ func (h *UserHandler) Register(c *gin.Context) { // check if the username is existing var item model.User - res := h.DB.Where("username = ?", data.Username).First(&item) + session := h.DB.Session(&gorm.Session{}) + if data.Mobile != "" { + session = session.Where("mobile = ?", data.Mobile) + data.Username = data.Mobile + } else if data.Email != "" { + session = session.Where("email = ?", data.Email) + data.Username = data.Email + } else if data.Username != "" { + session = session.Where("username = ?", data.Username) + } + session.First(&item) if item.Id > 0 { resp.ERROR(c, "该用户名已经被注册") return @@ -115,6 +134,8 @@ func (h *UserHandler) Register(c *gin.Context) { salt := utils.RandString(8) user := model.User{ Username: data.Username, + Mobile: data.Mobile, + Email: data.Email, Password: utils.GenPassword(data.Password, salt), Avatar: "/images/avatar/user.png", Salt: salt, @@ -134,7 +155,7 @@ func (h *UserHandler) Register(c *gin.Context) { user.Nickname = fmt.Sprintf("极客学长@%d", utils.RandomNumber(6)) } - res = h.DB.Create(&user) + res := h.DB.Create(&user) if res.Error != nil { resp.ERROR(c, "保存数据失败") logger.Error(res.Error) diff --git a/api/store/model/user.go b/api/store/model/user.go index bc2bafec..6a6e5829 100644 --- a/api/store/model/user.go +++ b/api/store/model/user.go @@ -4,6 +4,8 @@ type User struct { BaseModel Username string Nickname string + Email string + Mobile string Password string Avatar string Salt string // 密码盐 diff --git a/api/store/vo/user.go b/api/store/vo/user.go index 8e0faabe..06d9d55d 100644 --- a/api/store/vo/user.go +++ b/api/store/vo/user.go @@ -4,6 +4,8 @@ type User struct { BaseVo Username string `json:"username"` Nickname string `json:"nickname"` + Mobile string `json:"mobile"` + Email string `json:"email"` Avatar string `json:"avatar"` Salt string `json:"salt"` // 密码盐 Power int `json:"power"` // 剩余算力 diff --git a/web/src/assets/css/login.styl b/web/src/assets/css/login.styl index bf8b6c49..57d11521 100644 --- a/web/src/assets/css/login.styl +++ b/web/src/assets/css/login.styl @@ -96,7 +96,8 @@ font-size 20px background: #E9F1F6; padding: 8px; - border-radius: 50%; + border-radius: 50% + cursor pointer } .iconfont.icon-wechat { color #0bc15f diff --git a/web/src/assets/css/member.styl b/web/src/assets/css/member.styl index 7147db4a..c1f61bb5 100644 --- a/web/src/assets/css/member.styl +++ b/web/src/assets/css/member.styl @@ -4,8 +4,6 @@ .el-dialog { .el-dialog__body { - padding-top 10px - .pay-container { .amount { text-align center diff --git a/web/src/components/ResetAccount.vue b/web/src/components/BindMobile.vue similarity index 73% rename from web/src/components/ResetAccount.vue rename to web/src/components/BindMobile.vue index 04446884..9fa4d54e 100644 --- a/web/src/components/ResetAccount.vue +++ b/web/src/components/BindMobile.vue @@ -6,14 +6,12 @@ :before-close="close" :title="title" > -
- -

当前绑定账号:{{ username }},只允许使绑定有效的手机号或者邮箱地址作为登录账号。

-
+
+
当前已绑手机号:{{ mobile }}
- - + + @@ -21,7 +19,7 @@ - + @@ -44,26 +42,31 @@ import SendMsg from "@/components/SendMsg.vue"; import {ElMessage} from "element-plus"; import {httpPost} from "@/utils/http"; import {validateEmail, validateMobile} from "@/utils/validate"; +import {checkSession} from "@/store/cache"; const props = defineProps({ show: Boolean, - username: String }); const showDialog = computed(() => { return props.show }) -const title = ref('重置登录账号') +const title = ref('绑定手机') +const mobile = ref('') const form = ref({ - username: '', + mobile: '', code: '' }) +checkSession().then(user => { + mobile.value = user.mobile +}) + const emits = defineEmits(['hide']); const save = () => { - if (!validateMobile(form.value.username) && !validateEmail(form.value.username)) { + if (!validateMobile(form.value.mobile) && !validateEmail(form.value.mobile)) { return ElMessage.error("请输入合法的手机号/邮箱地址") } if (form.value.code === '') { @@ -87,7 +90,15 @@ const close = function () {