コード例 #1
0
ファイル: login.go プロジェクト: Zxnui/go_web_demo
//修改密码
func LoginChangePasswd(w http.ResponseWriter, r *http.Request) {
	data := make(map[string]interface{})
	user := new(models.User)
	t, err := template.ParseFiles("views/login_passwd_change.html", "views/common/head.tpl")
	if pageNotFound(w, err) {
		return
	}
	l, err := template.ParseFiles("views/login.html", "views/common/head.tpl")
	if pageNotFound(w, err) {
		return
	}
	if r.Method == "GET" {
		emailCode := r.FormValue("emailCode")
		user.Email_change = emailCode
		has, _, _ := models.SelectUser(user)
		if has {
			data["emailCode"] = emailCode
			data["user"] = user
			data["error"] = ""
			t.Execute(w, data)
			return
		} else {
			data["error"] = "密码修改失败,请重试"
			l.Execute(w, data)
			return
		}

	} else {
		pwd := r.PostFormValue("pwd")
		user.Email_change = r.PostFormValue("emailCode")
		has, userInfo, _ := models.SelectUser(user)
		if has {
			id := userInfo.Id
			user = new(models.User)
			user.Passwd = GetMd5String(pwd)
			user.Email_change = GetMd5String(userInfo.Uname + userInfo.Email + userInfo.Passwd)
			err := models.UpdateUser(id, user)
			if CheckError("密码修改失败", err) {
				data["error"] = "密码修改失败,请重试"
				l.Execute(w, data)
				return
			} else {
				data["success"] = "密码修改成功,请登录"
				l.Execute(w, data)
				return
			}
		} else {
			data["error"] = "密码修改失败,请重试"
			l.Execute(w, data)
			return
		}
	}
}
コード例 #2
0
ファイル: base.go プロジェクト: Zxnui/go_web_demo
//发送邮件
func SendToMail(toEmail, name string) error {
	b64 := base64.NewEncoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")

	email, _ := conf.Cfg.GetValue("email", "email")
	password, _ := conf.Cfg.GetValue("email", "passwd")
	host, _ := conf.Cfg.GetValue("email", "host")
	subject, _ := conf.Cfg.GetValue("email", "subject")
	sendName, _ := conf.Cfg.GetValue("email", "sendName")

	from := mail.Address{sendName, email}
	to := mail.Address{name, toEmail}

	hp := strings.Split(host, ":")
	auth := smtp.PlainAuth("", email, password, hp[0])

	header := make(map[string]string)
	header["From"] = from.String()
	header["To"] = to.String()
	header["Subject"] = fmt.Sprintf("=?UTF-8?B?%s?=", b64.EncodeToString([]byte(subject)))
	header["MIME-Version"] = "1.0"
	header["Content-Type"] = "text/html; charset=UTF-8"
	header["Content-Transfer-Encoding"] = "base64"

	//获取用户信息
	userInfo, _, _ := models.GetUserInfo(name)
	EmailMd5 := GetMd5String(toEmail + name + userInfo.Passwd)
	newUser := new(models.User)
	newUser.Email_change = EmailMd5
	err := models.UpdateUser(userInfo.Id, newUser)
	if CheckError("数据库读取失败", err) {
		return err
	}
	body := `<strong>修改密码</strong>
	<p>访问以下网址:<a href="http://` + conf.HttpWeb + `/login/changePasswd?emailCode=` + EmailMd5 + `">http://` + conf.HttpWeb + `/login/changePasswd?emailCode=` + EmailMd5 + `<a><p>
	<p>如果以上链接无法访问,请将该网址复制并粘贴至新的浏览器窗口中。</p>`

	message := ""
	for k, v := range header {
		message += fmt.Sprintf("%s: %s\r\n", k, v)
	}
	message += "\r\n" + b64.EncodeToString([]byte(body))

	send_to := strings.Split(toEmail, ";")
	err = smtp.SendMail(host, auth, email, send_to, []byte(message))
	return err
}
コード例 #3
0
ファイル: login.go プロジェクト: Zxnui/go_web_demo
//发送邮件,找回密码
func LoginForget(w http.ResponseWriter, r *http.Request) {
	data := make(map[string]interface{})
	user := new(models.User)
	t, err := template.ParseFiles("views/login_forget.html", "views/common/head.tpl")
	if pageNotFound(w, err) {
		return
	}
	l, err := template.ParseFiles("views/login.html", "views/common/head.tpl")
	if pageNotFound(w, err) {
		return
	}
	if r.Method == "GET" {
		data["user"] = user
		data["error"] = ""
		t.Execute(w, data)
		return
	} else {
		user.Uname = r.PostFormValue("uname")
		user.Email = r.PostFormValue("email")
		s := models.GetUserNameAndEmail(user.Uname, user.Email)
		if len(s) > 0 {
			data["error"] = s
			data["user"] = user
			t.Execute(w, data)
			return
		}

		//发送邮件
		err = SendToMail(user.Email, user.Uname)
		if CheckError("邮件发送失败:", err) {
			data["error"] = "邮件发送失败,稍后再试"
			data["user"] = user
			t.Execute(w, data)
			return
		}
		data["success"] = "请登录邮箱,修改密码"
		l.Execute(w, data)
		return
	}
}
コード例 #4
0
ファイル: login.go プロジェクト: Zxnui/go_web_demo
//注册
func LoginInfo(w http.ResponseWriter, r *http.Request) {
	data := make(map[string]interface{})
	user := new(models.User)
	t, err := template.ParseFiles("views/login_info.html", "views/common/head.tpl")
	if pageNotFound(w, err) {
		return
	}
	l, err := template.ParseFiles("views/login.html", "views/common/head.tpl")
	if pageNotFound(w, err) {
		return
	}
	if r.Method == "GET" {
		data["user"] = user
		data["error"] = ""
		t.Execute(w, data)
		return
	} else {
		user.Uname = r.PostFormValue("uname")
		user.Email = r.PostFormValue("email")
		user.Passwd = GetMd5String(r.PostFormValue("pwd"))
		user.Status = 1
		user.Subtime = time.Now()
		s := models.GetUserNameOrEmail(user.Uname, user.Email)
		if len(s) > 0 {
			data["error"] = s
			data["user"] = user
			t.Execute(w, data)
			return
		}
		err = models.InsertUser(user)
		if CheckError("数据库连接失败:", err) {
			data["user"] = user
			data["error"] = "网站连接失败,请稍后重试"
			t.Execute(w, data)
			return
		}
		data["success"] = "注册成功,请登录"
		l.Execute(w, data)
		return
	}

}