//POST /account/send-reset-email func (c Account) SendResetEmail(email string) revel.Result { var user models.User code := uuid.NewUUID() user.Email = email user.ResetCode = code.String() user.ResetCodeCreatedTime = time.Now() if user.HasEmail() { _, err := engine.Where("email = ?", email). Cols("reset_code", "reset_code_created_time"). Update(&user) if err != nil { fmt.Println(err) } subject := "reset password" content := fmt.Sprintf( `<h2><a href="http://%s:%s/account/reset/%s">Reset Password</a></h2>`, appAddr, appPort, user.ResetCode) SendMail( subject, content, smtpConfig.Username, []string{email}, smtpConfig, true) c.Flash.Success("Email has been sent, pleas check it.") return c.Redirect(routes.Account.Notice()) } else { c.Flash.Error("Incorrect Email") return c.Redirect(routes.Account.Notice()) } }
//POST /account/reset func (c Account) PostReset(user models.User) revel.Result { username := c.Session[USERNAME] if user.Password == user.ConfirmPassword { user.HashedPassword, user.Salt = models.GenHashPasswordAndSalt(user.Password) user.ResetCode = "" _, err := engine.Where("name = ?", username). Cols("hashed_password", "salt", "reset_code"). Update(&user) if err != nil { fmt.Println(err) } c.Session[USERNAME] = username c.Flash.Success("reset success!") return c.Redirect(routes.Problem.Index(0)) } else { resetcode := c.Flash.Data[RESETCODE] c.Flash.Error("两次密码输入不一致") return c.Redirect(routes.Account.Reset(resetcode)) } }