duidui_fiber/internal/admin_auth/handler/auth_handler.go
2026-03-27 10:34:03 +08:00

100 lines
2.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package handler
import (
"dd_fiber_api/internal/admin_auth"
"dd_fiber_api/internal/admin_auth/service"
"github.com/gofiber/fiber/v2"
)
// AuthHandler 认证处理器
type AuthHandler struct {
authService *service.AuthService
}
// NewAuthHandler 创建认证处理器
func NewAuthHandler(authService *service.AuthService) *AuthHandler {
return &AuthHandler{
authService: authService,
}
}
// Login 登录
func (h *AuthHandler) Login(c *fiber.Ctx) error {
var req admin_auth.LoginRequest
if err := c.BodyParser(&req); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"message": "请求参数解析失败: " + err.Error(),
})
}
// 验证必填字段
if req.Username == "" && req.Phone == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"message": "用户名或手机号不能为空",
})
}
if req.Password == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"message": "密码不能为空",
})
}
// 获取客户端IP
clientIP := c.IP()
// 调用服务层
resp, err := h.authService.Login(&req, clientIP)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"success": false,
"message": "登录失败: " + err.Error(),
})
}
if !resp.Success {
return c.Status(fiber.StatusUnauthorized).JSON(resp)
}
return c.Status(fiber.StatusOK).JSON(resp)
}
// GetMe 获取当前用户信息
func (h *AuthHandler) GetMe(c *fiber.Ctx) error {
// 从中间件获取token中间件会将claims存储到locals中
_, ok := c.Locals("claims").(*admin_auth.JWTClaims)
if !ok {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"success": false,
"message": "未授权",
})
}
// 从数据库获取最新用户信息
userInfo, err := h.authService.GetUserInfo(c.Get("Authorization"))
if err != nil {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"success": false,
"message": "获取用户信息失败: " + err.Error(),
})
}
return c.Status(fiber.StatusOK).JSON(fiber.Map{
"success": true,
"message": "获取成功",
"user": userInfo,
})
}
// Logout 登出前端删除token即可这里可以记录日志或清除缓存
func (h *AuthHandler) Logout(c *fiber.Ctx) error {
// 可以在这里实现token黑名单、清除缓存等逻辑
return c.Status(fiber.StatusOK).JSON(fiber.Map{
"success": true,
"message": "登出成功",
})
}