用户认证系统 #

一、系统概述 #

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