Golang实现简单登录注册 忘记密码

引入需要的包以及数据库连接

// 按需引入需要的包
	"database/sql"
	"fmt"
	"github.com/gin-gonic/gin" //gin
	_ "github.com/go-sql-driver/mysql" //mysql
	"strings"
// 连接数据库参数
const (
	userName = "用户名"
	password = "密码"
	ip = "ip地址"
	port = "端口"
	dbName = "数据库名"
)

var DB *sql.DB
// 连接数据库
func initDB() {
	// 构建连接:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
	path := strings.Join([]string{userName, ":", password, "@tcp(",ip, ":", port, ")/", dbName, "?charset=utf8"}, "")
	// 打开数据库 ("驱动名",连接)
	DB,_ = sql.Open("mysql",path)
	// 设置数据库最大连接数
	DB.SetConnMaxLifetime(100)
	// 设置数据库最大闲置数
	DB.SetMaxIdleConns(10)
	// 验证连接
	if err := DB.Ping(); err != nil {
		fmt.Println("连接数据库失败")
		return
	}
	fmt.Println("连接数据库成功")
}

声明用户结构体

// User
type User struct {
	id int //id
	username string //用户名
	password string //密码
	tel string //手机号
}

登录

func userLogin(c *gin.Context) {
	userName := c.Request.URL.Query().Get("username") //获取登录用户名
	passWord := c.Request.URL.Query().Get("password") //获取登录密码
	//查询列表
	rows,err := DB.Query("SELECT * FROM voro_user") //执行sql语句查询表中数据
	if err != nil {
		fmt.Println("查询失败")
	}
	var s User
	for rows.Next() {
		err = rows.Scan(&s.id, &s.username, &s.password, &s.tel)
		if err != nil {
			fmt.Println(err)
		}
	}
	if userName != s.username { // 判断获取到的登录用户名是否在数据库中存在
		// 无此用户(用户名不存在)
		c.JSON(200,gin.H{
			"success":false,
			"code":400,
			"msg":"无此用户",
		})
	} else {
		// 获取当前用户名密码
		// 获取登录用户名的密码 查询是否匹配
		us,_ := DB.Query("SELECT password FROM voro_user where username='" + userName + "'")
		for us.Next(){
			var u passWd
			err = us.Scan(&u.password)
			if err != nil {
				fmt.Println(err)
			}
			// 密码是否匹配
			if passWord != u.password{ //密码不一致
				c.JSON(200,gin.H{
					"success":false,
					"code":400,
					"msg":"密码错误",
				})
			} else {
				c.JSON(200,gin.H{ //用户名存在且密码匹配
					"success":true,
					"code":200,
					"msg":"登录成功",
				})
			}
		}
	}
	rows.Close()
}

注册

func userRegister(c *gin.Context){
	userName := c.Request.URL.Query().Get("username") //注册用户名
	passWord := c.Request.URL.Query().Get("password") //注册密码
	userTel := c.Request.URL.Query().Get("tel") //注册手机号
	//查询列表
	rows,err := DB.Query("SELECT * FROM voro_user") //查询用户名是否已存在
	if err != nil {
		fmt.Println("查询失败")
	}
	//遍历返回结果
	for rows.Next() {
		var s User
		err = rows.Scan(&s.id,&s.username,&s.password,&s.tel)
		if err != nil{
			fmt.Println(err)
		}
		fmt.Println(s.username)
		if userName != s.username{ //数据库中不存在此用户(可以注册)
			// 执行插入
			result, err := DB.Exec("INSERT INTO voro_user(username,password,tel)VALUES (?,?,?)",userName,passWord,userTel)
			if err != nil {
				fmt.Println("执行失败")
				return
			} else {
				rows,_ := result.RowsAffected() //输出执行的行数
				if rows != 1 { //不为1 表示插入失败(注册失败)
					c.JSON(200,gin.H{
						"success":false,
					})
				} else {
					c.JSON(200,gin.H{ //注册成功
						"success":true,
						"username":userName,
						"tel":userTel,
					})
				}
			}
		} else {
			fmt.Println("用户名已被注册") //用户名已存在(注册失败 用户名已被注册)
			c.JSON(200,gin.H{
				"code":400,
				"success":false,
				"msg":"用户名已被注册",
			})
		}
	}
	rows.Close()
}

忘记密码

func forgetPassword(c *gin.Context){
	userName := c.Request.URL.Query().Get("username") //忘记密码的用户名
	newPassWord := c.Request.URL.Query().Get("newPassWord") //需要修改的新密码
	userTel := c.Request.URL.Query().Get("tel") //用户注册手机号
	//查询列表
	rows,err := DB.Query("SELECT * FROM voro_user")
	if err != nil {
		fmt.Println("查询失败")
	}
	var s User
	for rows.Next() {
		err = rows.Scan(&s.id, &s.username, &s.password, &s.tel)
		if err != nil {
			fmt.Println(err)
		}
	}
	if userName != s.username { //不存在此用户
		// 无此用户
		c.JSON(200, gin.H{
			"success": false,
			"code":    400,
			"msg":     "无此用户",
		})
	} else { //存在此用户名
		// 获取用户注册手机号
		us,_ := DB.Query("SELECT tel FROM voro_user where username='" + userName + "'")
		for us.Next(){
			var m User
			err = us.Scan(&m.tel)
			if err != nil {
				fmt.Println(err)
			}
			// 手机号是否匹配
			if userTel != m.tel{ //注册手机号不匹配
				c.JSON(200,gin.H{
					"success":false,
					"code":400,
					"msg":"安全手机验证错误",
				})
			} else { //注册手机号一致
				results,err:=DB.Exec("UPDATE voro_user SET password='" + newPassWord + "' where username='" + userName + "' and tel='" + userTel + "'") //执行更新操作
				if err != nil {
					fmt.Println(err)
				}
				aff_count,_ := results.RowsAffected()
				if aff_count != 0{ //不为0 表示更新成功
					c.JSON(200,gin.H{
						"success":true,
						"code":200,
						"msg":"密码更新成功",
					})
				} else {
					c.JSON(200,gin.H{
						"success":false,
						"code":400,
						"msg":"密码更新失败",
					})
				}
			}
		}
	}
	rows.Close()
}

全部代码

package main

import (
	"database/sql"
	"fmt"
	"github.com/gin-gonic/gin"
	_ "github.com/go-sql-driver/mysql"
	"strings"
)
// 连接数据库参数
const (
	userName = "***"
	password = "***"
	ip = "***"
	port = "***"
	dbName = "***"
)

var DB *sql.DB
// 连接数据库
func initDB() {
	// 构建连接:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
	path := strings.Join([]string{userName, ":", password, "@tcp(",ip, ":", port, ")/", dbName, "?charset=utf8"}, "")
	// 打开数据库 ("驱动名",连接)
	DB,_ = sql.Open("mysql",path)
	// 设置数据库最大连接数
	DB.SetConnMaxLifetime(100)
	// 设置数据库最大闲置数
	DB.SetMaxIdleConns(10)
	// 验证连接
	if err := DB.Ping(); err != nil {
		fmt.Println("连接数据库失败")
		return
	}
	fmt.Println("连接数据库成功")
}
// User
type User struct {
	id int //id
	username string //用户名
	password string //密码
	tel string //手机号
}
type passWd struct {
	password string
}
// @userLogin
func userLogin(c *gin.Context) {
	userName := c.Request.URL.Query().Get("username")
	passWord := c.Request.URL.Query().Get("password")
	//查询列表
	rows,err := DB.Query("SELECT * FROM voro_user")
	if err != nil {
		fmt.Println("查询失败")
	}
	var s User
	for rows.Next() {
		err = rows.Scan(&s.id, &s.username, &s.password, &s.tel)
		if err != nil {
			fmt.Println(err)
		}
	}
	if userName != s.username {
		// 无此用户
		c.JSON(200,gin.H{
			"success":false,
			"code":400,
			"msg":"无此用户",
		})
	} else {
		// 获取当前用户名密码
		us,_ := DB.Query("SELECT password FROM voro_user where username='" + userName + "'")
		for us.Next(){
			var u passWd
			err = us.Scan(&u.password)
			if err != nil {
				fmt.Println(err)
			}
			// 密码是否匹配
			if passWord != u.password{
				c.JSON(200,gin.H{
					"success":false,
					"code":400,
					"msg":"密码错误",
				})
			} else {
				c.JSON(200,gin.H{
					"success":true,
					"code":200,
					"msg":"登录成功",
				})
			}
		}
	}
	rows.Close()
}

// @userRegister
func userRegister(c *gin.Context){
	userName := c.Request.URL.Query().Get("username")
	passWord := c.Request.URL.Query().Get("password")
	userTel := c.Request.URL.Query().Get("tel")
	//查询列表
	rows,err := DB.Query("SELECT * FROM voro_user")
	if err != nil {
		fmt.Println("查询失败")
	}
	//遍历返回结果
	for rows.Next() {
		var s User
		err = rows.Scan(&s.id,&s.username,&s.password,&s.tel)
		if err != nil{
			fmt.Println(err)
		}
		fmt.Println(s.username)
		if userName != s.username{
			// 执行插入
			result, err := DB.Exec("INSERT INTO voro_user(username,password,tel)VALUES (?,?,?)",userName,passWord,userTel)
			if err != nil {
				fmt.Println("执行失败")
				return
			} else {
				rows,_ := result.RowsAffected()
				if rows != 1 {
					c.JSON(200,gin.H{
						"success":false,
					})
				} else {
					c.JSON(200,gin.H{
						"success":true,
						"username":userName,
						"tel":userTel,
					})
				}
			}
		} else {
			fmt.Println("用户名已被注册")
			c.JSON(200,gin.H{
				"code":400,
				"success":false,
				"msg":"用户名已被注册",
			})
		}
	}
	rows.Close()
}
// @forgetPassword
func forgetPassword(c *gin.Context){
	userName := c.Request.URL.Query().Get("username")
	newPassWord := c.Request.URL.Query().Get("newPassWord")
	userTel := c.Request.URL.Query().Get("tel")
	//查询列表
	rows,err := DB.Query("SELECT * FROM voro_user")
	if err != nil {
		fmt.Println("查询失败")
	}
	var s User
	for rows.Next() {
		err = rows.Scan(&s.id, &s.username, &s.password, &s.tel)
		if err != nil {
			fmt.Println(err)
		}
	}
	if userName != s.username {
		// 无此用户
		c.JSON(200, gin.H{
			"success": false,
			"code":    400,
			"msg":     "无此用户",
		})
	} else {
		// 获取用户注册手机号
		us,_ := DB.Query("SELECT tel FROM voro_user where username='" + userName + "'")
		for us.Next(){
			var m User
			err = us.Scan(&m.tel)
			if err != nil {
				fmt.Println(err)
			}
			// 手机号是否匹配
			if userTel != m.tel{
				c.JSON(200,gin.H{
					"success":false,
					"code":400,
					"msg":"安全手机验证错误",
				})
			} else {
				results,err:=DB.Exec("UPDATE voro_user SET password='" + newPassWord + "' where username='" + userName + "' and tel='" + userTel + "'")
				if err != nil {
					fmt.Println(err)
				}
				aff_count,_ := results.RowsAffected()
				if aff_count != 0{
					c.JSON(200,gin.H{
						"success":true,
						"code":200,
						"msg":"密码更新成功",
					})
				} else {
					c.JSON(200,gin.H{
						"success":false,
						"code":400,
						"msg":"密码更新失败",
					})
				}
			}
		}
	}
	rows.Close()
}

func main(){
	initDB()
	router := gin.Default()
	user := router.Group("/user")
	{
		user.POST("/login",userLogin)
		user.POST("/register",userRegister)
		user.POST("/forgetpassword",forgetPassword)
	}
	router.Run(":9000")
}

猜你喜欢

转载自blog.csdn.net/qinghuan100/article/details/106786868