From 8c11c0375a640f60eda917abf18bc0fff767e725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=AF=BB=E6=AC=A2?= Date: Tue, 22 Apr 2025 17:29:22 +0800 Subject: [PATCH] =?UTF-8?q?:feature:=20=E6=B7=BB=E5=8A=A0=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=AF=B7=E6=B1=82=E5=8D=8F=E8=AE=AE=E7=9A=84=E5=87=BD?= =?UTF-8?q?=E6=95=B0=EF=BC=8C=E4=BC=98=E5=8C=96Logto=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E5=92=8C=E7=99=BB=E5=87=BAURL=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/handler/logto.go | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/internal/handler/logto.go b/internal/handler/logto.go index e7955c6..ea23ee9 100644 --- a/internal/handler/logto.go +++ b/internal/handler/logto.go @@ -2,6 +2,7 @@ package handler import ( "net/http" + "strings" "time" "gitee.ltd/lxh/wechat-robot/internal/types" @@ -21,6 +22,23 @@ var store = session.New(session.Config{ // 可以配置 CookieSecret }) +// getProtocol +// @description: 获取请求协议 +// @param c +// @return string +func getProtocol(c *fiber.Ctx) string { + protocol := c.Protocol() + for k, v := range c.GetReqHeaders() { + if strings.ToLower(k) == "referer" { + refererProtocol := strings.Split(v[0], ":")[0] + if refererProtocol != protocol { + protocol = refererProtocol + } + } + } + return protocol +} + // LogtoLogin 重定向到Logto登录页面 func LogtoLogin(c *fiber.Ctx) error { // 加载配置 @@ -30,7 +48,8 @@ func LogtoLogin(c *fiber.Ctx) error { } // 构建回调URL - callbackURL := c.Protocol() + "://" + c.Hostname() + "/auth/logto/callback" + + callbackURL := getProtocol(c) + "://" + c.Hostname() + "/auth/logto/callback" // 创建Logto客户端配置 logtoConfig := &logtoClient.LogtoConfig{ @@ -121,7 +140,7 @@ func LogtoLogout(c *fiber.Ctx) error { client := logtoClient.NewLogtoClient(logtoConfig, fiberSessionStorage) // 构建登出后重定向URL - postLogoutRedirectURL := c.Protocol() + "://" + c.Hostname() + postLogoutRedirectURL := getProtocol(c) + "://" + c.Hostname() // 获取登出链接 signOutUri, err := client.SignOut(postLogoutRedirectURL)