51 lines
1.0 KiB
Go
51 lines
1.0 KiB
Go
package middleware
|
||
|
||
import (
|
||
"strings"
|
||
|
||
"gitee.ltd/lxh/wechat-robot/internal/config"
|
||
"github.com/gofiber/fiber/v2"
|
||
)
|
||
|
||
// IsAuthenticated
|
||
// @description: 检查用户是否已登录
|
||
// @param c
|
||
// @return bool
|
||
func IsAuthenticated(c *fiber.Ctx) bool {
|
||
token := c.Cookies("auth_token")
|
||
if token == "" {
|
||
return false
|
||
}
|
||
|
||
// 加载配置
|
||
cfg, err := config.Load()
|
||
if err != nil {
|
||
return false
|
||
}
|
||
|
||
// 根据认证类型验证
|
||
switch cfg.Auth.Type {
|
||
case "password":
|
||
// 对比token (简单实现,实际应用可能需要更复杂的验证)
|
||
return token == cfg.Auth.Password.SecretKey
|
||
case "logto":
|
||
// 如果是Logto认证方式,检查token前缀,有前缀则认为已登录
|
||
return strings.HasPrefix(token, "logto:")
|
||
default:
|
||
return false
|
||
}
|
||
}
|
||
|
||
// Authenticate
|
||
// @description: 创建身份验证中间件
|
||
// @return fiber.Handler
|
||
func Authenticate() fiber.Handler {
|
||
return func(c *fiber.Ctx) error {
|
||
// 检查是否已登录
|
||
if !IsAuthenticated(c) {
|
||
return c.Redirect("/login")
|
||
}
|
||
return c.Next()
|
||
}
|
||
}
|