2025-04-02 14:29:44 +08:00

73 lines
1.8 KiB
Go
Raw 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 (
"time"
"github.com/gofiber/fiber/v2"
"gitee.ltd/lxh/wechat-robot/internal/config"
"gitee.ltd/lxh/wechat-robot/internal/middleware"
)
// LoginPage 显示登录页面
func LoginPage(c *fiber.Ctx) error {
// 如果已经登录,则重定向到机器人列表
if middleware.IsAuthenticated(c) {
return c.Redirect("/admin/robots")
}
// 获取可能的错误消息
errorMsg := c.Query("error")
// 设置 NoLayout 为 true使用独立布局不显示主应用的导航组件
return c.Render("auth/login", fiber.Map{
"Title": "登录",
"ErrorMsg": errorMsg,
"NoLayout": true,
})
}
// LoginSubmit 处理登录表单提交
func LoginSubmit(c *fiber.Ctx) error {
// 获取用户输入的密钥
token := c.FormValue("token")
// 检查凭据有效性
cfg, err := config.Load()
if err != nil {
return c.Redirect("/login?error=系统错误,无法加载配置")
}
// 仅验证密钥是否与配置的AdminToken匹配
if token != cfg.Auth.AdminToken {
return c.Redirect("/login?error=访问密钥不正确")
}
// 登录成功,设置认证 Cookie
cookie := new(fiber.Cookie)
cookie.Name = "auth_token"
cookie.Value = cfg.Auth.SecretKey // 在实际应用中,这应该是一个生成的会话令牌
cookie.Expires = time.Now().Add(time.Hour * time.Duration(cfg.Auth.TokenExpiry))
cookie.HTTPOnly = true
cookie.Path = "/"
c.Cookie(cookie)
// 重定向到机器人列表页面,而不是首页
return c.Redirect("/admin/robots")
}
// Logout 处理退出登录
func Logout(c *fiber.Ctx) error {
// 清除认证 Cookie
cookie := new(fiber.Cookie)
cookie.Name = "auth_token"
cookie.Value = ""
cookie.Expires = time.Now().Add(-time.Hour) // 设置为过期
cookie.HTTPOnly = true
cookie.Path = "/"
c.Cookie(cookie)
// 重定向到登录页
return c.Redirect("/login")
}