func (this *UserController) processUserEditForm(user *models.User) { valid := validation.Validation{} var usernameChanged, emailChanged bool userEditForm := UserEditForm{} if err := this.ParseForm(&userEditForm); err != nil { beego.Error(err) } _, err := valid.Valid(userEditForm) if err != nil { beego.Error(err) this.Abort("400") } if user.Username != userEditForm.Username { usernameChanged = true if time.Since(user.Created).Hours() <= 720 { tmpUser := models.User{Username: userEditForm.Username} if err := tmpUser.ValidUsername(); err != nil { valid.SetError("Username", err.Error()) } if tmpUser.Read("Username") == nil { valid.SetError("Username", "用户名已经被使用") } } else { valid.SetError("Username", "注册超过30天后无法修改用户名") } } if user.Email != userEditForm.Email { emailChanged = true tmpUser := models.User{Email: userEditForm.Email} if err := tmpUser.Read("Email"); err == nil { valid.SetError("Email", "电子邮件地址已经被使用") } } user.Url = userEditForm.Url if err := user.ValidateUrl(); user.Url != "" && err != nil { valid.SetError("Url", err.Error()) } this.Data["UserEditForm"] = &userEditForm if len(valid.Errors) > 0 { this.Data["UserEditFormValidErrors"] = valid.Errors beego.Trace(fmt.Sprint(valid.Errors)) } else { if usernameChanged { user.Username = userEditForm.Username } if emailChanged { user.Email = userEditForm.Email user.IsActive = false } user.PublicEmail = userEditForm.PublicEmail user.Nickname = userEditForm.Nickname user.Info = userEditForm.Info user.Company = userEditForm.Company user.Location = userEditForm.Location user.Url = userEditForm.Url user.Qq = userEditForm.Qq user.Weibo = userEditForm.Weibo user.WeChat = userEditForm.WeChat if err := user.Update(); err != nil { this.Abort("500") } if usernameChanged && this.User.Id == user.Id { this.LogUserIn(user, false) } if emailChanged { //发验证邮件 this.resendValidation(user) this.FlashWrite("notice", fmt.Sprintf("资料已经更新。由于修改了Email地址,我们向%s发送了一封验证邮件,请重新验证。", user.Email)) } else { this.FlashWrite("notice", "资料已更新!") } redirectUrl := beego.UrlFor("UserController.Edit", ":username", user.Username) this.Redirect(redirectUrl, 302) } }