使用Gin和Gorm实现登录注册功能(demo版) | 青训营

736 阅读2分钟

本笔记将介绍如何使用gin和gorm来实现简单的用户登录和注册功能。Gin是一个用于构建Web应用程序的轻量级框架,而Gorm是Go语言的ORM框架,用于处理数据库操作。

步骤一:安装Gin和Gorm

首先,我们需要使用 Go 模块管理工具来安装 Gin 和 GORM。在终端中执行以下命令:

go get -u github.com/gin-gonic/gin
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

步骤二:创建数据库和模型

我们首先需要在数据库中创建一个用于存储用户信息的表。假设我们有一个名为 users 的表,包含 idusernamepassword 字段。接下来,我们创建相应的 GORM 模型:

type User struct {
	ID       uint   `gorm:"primaryKey"`
	Username string `gorm:"unique"`
	Password string
}

// 迁移(创建表)
func Migrate(db *gorm.DB) {
	db.AutoMigrate(&User{})
}

步骤三:初始化Gin和数据库连接

main函数中,我们初始化Gin和数据库连接,并进行路由设置:

func main() {
	// 连接数据库
	dsn := "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Fatal("Failed to connect to database")
	}
	Migrate(db) // 执行迁移

	// 初始化 Gin
	r := gin.Default()

	// 设置路由
	r.POST("/register", Register)
	r.POST("/login", Login)

	// 启动服务器
	r.Run(":8080")
}

步骤四:注册功能

实现用户注册功能,当用户访问 /register 路由时,将接收 POST 请求,解析请求体中的 JSON 数据,然后将用户信息插入数据库

func Register(c *gin.Context) {
	var newUser User
	if err := c.BindJSON(&newUser); err != nil {
		c.JSON(400, gin.H{"error": "Invalid input"})
		return
	}

	// 在数据库中创建新用户
	if err := db.Create(&newUser).Error; err != nil {
		c.JSON(500, gin.H{"error": "Failed to create user"})
		return
	}

	c.JSON(200, gin.H{"message": "User registered successfully"})
}

步骤五:登陆功能

实现用户登录功能,当用户访问 /login 路由时,将接收 POST 请求,解析请求体中的 JSON 数据,然后查询数据库验证用户信息:

func Login(c *gin.Context) {
	var inputUser User
	if err := c.BindJSON(&inputUser); err != nil {
		c.JSON(400, gin.H{"error": "Invalid input"})
		return
	}

	var dbUser User
	if err := db.Where("username = ?", inputUser.Username).First(&dbUser).Error; err != nil {
		c.JSON(401, gin.H{"error": "User not found"})
		return
	}

	if inputUser.Password != dbUser.Password {
		c.JSON(401, gin.H{"error": "Invalid password"})
		return
	}

	c.JSON(200, gin.H{"message": "Login successful"})
}

总结

通过以上步骤,我们已经成功使用 Gin 和 GORM 实现了一个简单的用户登录和注册功能。当用户访问 /register 路由时,会注册新用户到数据库;当用户访问 /login 路由时,会验证用户信息并进行登录。