用户认证系统 #
一、系统概述 #
1.1 功能模块 #
- 用户注册
- 用户登录
- JWT认证
- 权限控制
- 密码重置
二、完整实现 #
2.1 用户模型 #
go
type User struct {
ID string `json:"id" gorm:"primaryKey"`
Username string `json:"username" gorm:"uniqueIndex"`
Email string `json:"email" gorm:"uniqueIndex"`
Password string `json:"-"`
Role string `json:"role"`
Active bool `json:"active"`
CreatedAt time.Time `json:"created_at"`
}
2.2 注册接口 #
go
app.Post("/register", func(c *fiber.Ctx) error {
var input struct {
Username string `json:"username"`
Email string `json:"email"`
Password string `json:"password"`
}
if err := c.BodyParser(&input); err != nil {
return c.Status(400).JSON(fiber.Map{"error": "Invalid input"})
}
hashedPassword, _ := bcrypt.GenerateFromPassword([]byte(input.Password), 10)
user := User{
ID: uuid.New().String(),
Username: input.Username,
Email: input.Email,
Password: string(hashedPassword),
Role: "user",
Active: true,
}
db.Create(&user)
return c.Status(201).JSON(fiber.Map{"message": "User created"})
})
2.3 登录接口 #
go
app.Post("/login", func(c *fiber.Ctx) error {
var input struct {
Username string `json:"username"`
Password string `json:"password"`
}
if err := c.BodyParser(&input); err != nil {
return c.Status(400).JSON(fiber.Map{"error": "Invalid input"})
}
var user User
if err := db.Where("username = ?", input.Username).First(&user).Error; err != nil {
return c.Status(401).JSON(fiber.Map{"error": "Invalid credentials"})
}
if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(input.Password)); err != nil {
return c.Status(401).JSON(fiber.Map{"error": "Invalid credentials"})
}
token, _ := GenerateToken(user.ID, user.Role)
return c.JSON(fiber.Map{"token": token})
})
三、总结 #
3.1 认证流程 #
text
注册 → 密码加密 → 存储
登录 → 验证密码 → 生成Token
请求 → 验证Token → 获取用户信息
3.2 下一步 #
现在你已经掌握了用户认证系统,接下来让我们学习 博客系统,了解完整项目开发!
最后更新:2026-03-28