diff --git a/backend/defConfig/errorCodes.json b/backend/defConfig/errorCodes.json index eb8c688..b0c88c6 100644 --- a/backend/defConfig/errorCodes.json +++ b/backend/defConfig/errorCodes.json @@ -6,6 +6,7 @@ "userNameDup":-4, "userNameNoFund":-41, "userPassIncorrect":-42, + "userEmailFormatError":-43, "userCookieError":-44, "userCookieNotFund":-44, "userCookieExpired":-44 diff --git a/backend/models/def.go b/backend/models/def.go index 7d8b2d1..e270ff0 100644 --- a/backend/models/def.go +++ b/backend/models/def.go @@ -4,6 +4,7 @@ import ( "crypto/md5" "crypto/rand" "encoding/hex" + "regexp" "time" ) @@ -81,3 +82,11 @@ func CheckCookiesAndUpdate(cookie *TabCookie_) bool { } //return false } + +// 判断邮箱是否合法 +func IsEmailValid(email string) bool { + // 正则表达式(覆盖 99% 常见邮箱格式) + pattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` + regex := regexp.MustCompile(pattern) + return regex.MatchString(email) +} diff --git a/backend/routers/apiUsers.go b/backend/routers/apiUsers.go index 4e5d476..b19ac32 100644 --- a/backend/routers/apiUsers.go +++ b/backend/routers/apiUsers.go @@ -71,6 +71,15 @@ type From_user_updateinfo struct { Birthday string `json:"birthday"` } +type From_user_changeemail struct { + Newemail string `json:"newemail"` +} + +type From_user_changepass struct { + Oldpass string `json:"oldpass"` + Newpass string `json:"newpass"` +} + func AuthenticationAuthority(ctx *gin.Context) (bool, models.TabUser_, map[string]interface{}) { var user models.TabUser_ @@ -118,6 +127,64 @@ func ApiUser(r *gin.RouterGroup) { r.POST("/test", func(ctx *gin.Context) { ReturnJson(ctx, "apiOK", nil) }) + + //修改用户密码 + r.POST("/changePassword", func(ctx *gin.Context) { + isAuth, user, data := AuthenticationAuthority(ctx) + if isAuth { + var jsonData From_user_changepass + if err := mapstructure.Decode(data, &jsonData); err == nil { + //验证旧密码 + fmt.Println(user) + //转换旧密码 + olduser := models.TabUser_{ + Pass: jsonData.Oldpass, + Salt: user.Salt, + } + models.HashUserPass(&olduser) + if olduser.Pass == user.Pass { + //旧密码正确,更新新密码 + var userupdate models.TabUser_ + userupdate.Pass = jsonData.Newpass + userupdate.Salt = models.RandStr32() + models.HashUserPass(&userupdate) + models.DB.Model(&user).Updates(&userupdate) + ReturnJson(ctx, "apiOK", nil) + } else { + //旧密码错误 + ReturnJson(ctx, "userPassIncorrect", nil) + } + + } else { + ReturnJson(ctx, "jsonErr", nil) + } + + } + }) + + //更新用户邮箱 + r.POST("/changeEmail", func(ctx *gin.Context) { + isAuth, user, data := AuthenticationAuthority(ctx) + if isAuth { + var jsonData From_user_changeemail + if err := mapstructure.Decode(data, &jsonData); err == nil { + //判断新邮箱格式 + if models.IsEmailValid(jsonData.Newemail) { + var userupdate models.TabUser_ + userupdate.Email = jsonData.Newemail + models.DB.Model(&user).Updates(&userupdate) + ReturnJson(ctx, "apiOK", nil) + } else { + ReturnJson(ctx, "userEmailFormatError", nil) + + } + + } else { + ReturnJson(ctx, "jsonErr", nil) + } + } + }) + //更新用户info r.POST("/updateInfo", func(ctx *gin.Context) { isAuth, user, data := AuthenticationAuthority(ctx) diff --git a/frontent/ops_vue_js/src/i18n/en.json b/frontent/ops_vue_js/src/i18n/en.json index 461464e..0633e24 100644 --- a/frontent/ops_vue_js/src/i18n/en.json +++ b/frontent/ops_vue_js/src/i18n/en.json @@ -6,6 +6,7 @@ "register": "Register" }, "message": { + "functionality_not_yet_developed":"Functionality not yet developed", "hello": "Hello", "welcome": "Welcome", "dark_mode": "Enable dark mode", @@ -47,7 +48,13 @@ "preferences": "Preferences", "administrator": "Administrator", "select_date":"Select a date", - "save_ok":"Saved successfully" + "save_ok":"Saved successfully", + "change_ok":"Changed successfully", + "type_old_pass":"Enter old password", + "type_new_pass":"Enter new password", + "type_cof_pass":"Confirm new password", + "old_pass_incorrect":"Old password is incorrect", + "confirm_password_incorrect":"Confirm password is incorrect" }, "settings": { "account_settings": "Account Settings", diff --git a/frontent/ops_vue_js/src/i18n/zh-CN.json b/frontent/ops_vue_js/src/i18n/zh-CN.json index 1d69854..f3db294 100644 --- a/frontent/ops_vue_js/src/i18n/zh-CN.json +++ b/frontent/ops_vue_js/src/i18n/zh-CN.json @@ -6,6 +6,7 @@ "register": "注册" }, "message": { + "functionality_not_yet_developed":"功能未开发", "hello": "你好", "welcome": "欢迎", "dark_mode": "深色模式", @@ -47,7 +48,13 @@ "preferences": "偏好设置", "administrator": "管理员", "select_date":"选择日期", - "save_ok":"保存成功" + "save_ok":"保存成功", + "change_ok":"更改成功", + "type_old_pass":"输入旧密码", + "type_new_pass":"输入新密码", + "type_cof_pass":"确认新密码", + "old_pass_incorrect":"旧密码不正确", + "confirm_password_incorrect":"确认密码不正确" }, "settings": { "account_settings": "个人设置", diff --git a/frontent/ops_vue_js/src/stores/user.js b/frontent/ops_vue_js/src/stores/user.js index 9a28cbc..c92bb62 100644 --- a/frontent/ops_vue_js/src/stores/user.js +++ b/frontent/ops_vue_js/src/stores/user.js @@ -86,6 +86,8 @@ export const useUserStore = defineStore("user", () => { getUserInfoFromCookie(); }; + + const cookieUpdata = (cookie) => { userCookie.value = cookie; myfuncs.saveJsonT("userCookie", cookie); @@ -118,6 +120,7 @@ export const useUserStore = defineStore("user", () => { isLoggedIn, getUserAvatarPath, getUserBirthday, + getUserInfoFromCookie, logout, login, loginFromStoreCookie, diff --git a/frontent/ops_vue_js/src/views/HomeView.vue b/frontent/ops_vue_js/src/views/HomeView.vue index c31f2a8..524a859 100644 --- a/frontent/ops_vue_js/src/views/HomeView.vue +++ b/frontent/ops_vue_js/src/views/HomeView.vue @@ -7,32 +7,11 @@ import imageCropper from "@/components/imageCropper.vue"; const user = useUserStore(); const mos = ref(); -function t() { - console.log("test"); - my_network_func.postJson( - "/users/test", - { - a: "1", - }, - (a) => { - console.log(a); - } - ); -} -function tt(){ - mos.value?.showAlert("danger", "123123", 5000); -} diff --git a/frontent/ops_vue_js/src/views/loginView.vue b/frontent/ops_vue_js/src/views/loginView.vue index da8408a..561cbcc 100644 --- a/frontent/ops_vue_js/src/views/loginView.vue +++ b/frontent/ops_vue_js/src/views/loginView.vue @@ -117,6 +117,9 @@ function functionupdataTitle() { } onMounted(() => { functionupdataTitle(); + if (userStore.isLoggedIn) { + router.push("/"); + } }); // 监听语言变化,更新标题 watch(locale, () => { diff --git a/frontent/ops_vue_js/src/views/registerView.vue b/frontent/ops_vue_js/src/views/registerView.vue index 6dc36c6..b3cd1c8 100644 --- a/frontent/ops_vue_js/src/views/registerView.vue +++ b/frontent/ops_vue_js/src/views/registerView.vue @@ -167,7 +167,11 @@ watch(locale, () => {
-
@@ -150,7 +321,10 @@ onMounted(() => {
{{ t("settings.birthday") }}
- +
-

{{ t("settings.password") }}

- - - +

+ {{ t("settings.password") }} + + + + + + + + + + + + +

+ + + + +
-