func (this *UserController) processUserPasswordForm(user *models.User) { valid := validation.Validation{} userPasswordForm := UserPasswordForm{} if err := this.ParseForm(&userPasswordForm); err != nil { beego.Error(err) } _, err := valid.Valid(userPasswordForm) if err != nil { beego.Error(err) this.Abort("400") } if !user.VerifyPassword(userPasswordForm.CurrentPassword) { valid.SetError("CurrentPassword", "当前密码错误") } if len(valid.Errors) > 0 { this.Data["UserPasswordFormValidErrors"] = valid.Errors beego.Trace(fmt.Sprint(valid.Errors)) } else { user.SetPassword(userPasswordForm.Password) if err := user.Update(); err != nil { this.Abort("500") } this.FlashWrite("notice", "密码已更新!") this.Redirect(this.Ctx.Request.RequestURI, 302) } }
//重设密码 func (this *AuthController) ResetPassword() { code := this.Ctx.Input.Param(":code") user := models.User{} if !user.TestActivateCode(code) { this.Abort("403") } this.Data["code"] = code this.Data["PageTitle"] = fmt.Sprintf("重设密码 | %s", setting.AppName) this.Layout = "layout.html" this.TplNames = "reset-password.html" valid := validation.Validation{} form := ResetPasswordForm{} if this.Ctx.Request.Method == "POST" { if err := this.ParseForm(&form); err != nil { beego.Error(err) } b, err := valid.Valid(form) if err != nil { beego.Error(err) } if b { user.SetPassword(form.Password) if err := user.Update(); err != nil { beego.Error(err) this.Abort("500") } user.ConsumeActivateCode(code) this.FlashWrite("notice", "新密码已经生效,请重新登录!") this.Redirect("/login", 302) } else { this.Data["HasError"] = true this.Data["errors"] = valid.Errors } } }
func (this *AuthController) Activate() { this.Data["PageTitle"] = fmt.Sprintf("用户激活 | %s", setting.AppName) code := this.Ctx.Input.Param(":code") user := models.User{} if user.VerifyActivateCode(code) { if this.IsStopForumSpamListed(&user) { this.FlashWrite("error", "由于你的ip或者电子邮件曾用来发广告,无法为你激活!") } else { user.IsActive = true user.Update() this.FlashWrite("notice", "谢谢,你的电子邮件已经验证!") } } else { this.FlashWrite("error", "糟糕,无法验证你的电子邮件!") } this.Redirect("/", 302) }
func (this *UserController) processUploadAvatar(user *models.User) { valid := validation.Validation{} avatarFile, header, err := this.GetFile("Avatar") if err != nil { this.Abort("400") } err = user.ValidateAndSetAvatar(avatarFile, header.Filename) defer avatarFile.Close() if err != nil { valid.SetError("Avatar", err.Error()) this.Data["UserAvatarFormValidErrors"] = valid.Errors } else { if err := user.Update("Avatar"); err != nil { this.Abort("500") } this.FlashWrite("notice", "头像已更新!") this.Redirect(this.Ctx.Request.RequestURI, 302) } }
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) } }
func (this *SocialAuthController) processRegisterForm(socialType social.SocialType, form SocialAuthRegisterForm, socialUserAvatarUrl string) { valid := validation.Validation{} var user models.User var actCode string var sub *sendcloud.Substitution var resp *http.Response if err := this.ParseForm(&form); err != nil { beego.Error(err) } if err := this.ParseForm(&form); err != nil { beego.Error(err) } b, err := valid.Valid(form) if err != nil { beego.Error(err) } if !b { goto showRegisterErrors } //验证用户名 user = models.User{Username: form.Username} if err := user.ValidUsername(); err != nil { valid.SetError("Username", err.Error()) goto showRegisterErrors } else { if user.Read("Username") == nil { valid.SetError("Username", fmt.Sprintf("%s已被使用,请使用其他用户名!", form.Username)) goto showRegisterErrors } } //验证email未被注册 user.Email = form.Email if user.Read("Email") == nil { valid.SetError("Email", "已被使用,请直接使用此电邮登录") goto showRegisterErrors } //通过所有验证 actCode, _ = user.GenerateActivateCode() user.SetPassword(form.Password) if err := user.Insert(); err != nil { beego.Error(err) this.Abort("500") return } sub = sendcloud.NewSubstitution() sub.AddTo(user.Email) sub.AddSub("%appname%", setting.AppName) sub.AddSub("%name%", user.Username) sub.AddSub("%url%", setting.AppUrl+beego.UrlFor("AuthController.Activate", ":code", actCode)) if err := setting.Sendcloud.SendTemplate("gotalk_register", setting.AppName+"欢迎你", setting.From, setting.FromName, sub); err != nil { beego.Error(err) } //复制头像 if resp, err = http.Get(socialUserAvatarUrl); err != nil { beego.Error(fmt.Sprintf("Error opening url:%s", socialUserAvatarUrl)) this.Abort("500") return } defer resp.Body.Close() if err := user.ValidateAndSetAvatar(resp.Body, ""); err != nil { beego.Error("error copying avatar ", socialUserAvatarUrl, "error: ", err.Error()) } if err := user.Update(); err != nil { beego.Error("error update avatar for user ", user.Username) } this.FlashWrite("notice", fmt.Sprintf("注册成功!欢迎你, %s。建议你再花点时间验证电子邮件!", user.Username)) if loginRedirect, _, err := SocialAuth.ConnectAndLogin(this.Ctx, socialType, user.Id); err != nil { beego.Error("ConnectAndLogin:"******"Let's redirect ", loginRedirect) this.Redirect(loginRedirect, 302) return } showRegisterErrors: this.Data["RegisterForm"] = form this.Data["RegisterormErrors"] = valid.Errors return }