feat(auth): 添加用户认证中间件并重构Linux.do登录流程

- 新增UserAuth中间件用于验证用户登录状态和权限
- 移除Linux.do登录中的redirectUri和minimumTrustLevel配置项
- 修改Linux.do登录流程以支持动态构建回调URL
- 将API v1接口组迁移至需要用户认证的路由
- 在远程AI服务调用中添加用户令牌认证
- 修复被封禁用户的认证检查逻辑
- 更新登录重定向函数以处理请求来源
- 添加RequestOrigin函数解析转发的主机和协议头
This commit is contained in:
HouYunFei
2026-05-25 12:05:02 +08:00
parent b2cae2471d
commit fe3294ed60
13 changed files with 72 additions and 67 deletions
+6 -6
View File
@@ -55,7 +55,7 @@ func Login(w http.ResponseWriter, r *http.Request) {
}
func LinuxDoAuthorize(w http.ResponseWriter, r *http.Request) {
authURL, err := service.LinuxDoAuthorizeURL(r.URL.Query().Get("redirect"))
authURL, err := service.LinuxDoAuthorizeURL(r, r.URL.Query().Get("redirect"))
if err != nil {
FailError(w, err)
return
@@ -64,12 +64,12 @@ func LinuxDoAuthorize(w http.ResponseWriter, r *http.Request) {
}
func LinuxDoCallback(w http.ResponseWriter, r *http.Request) {
session, redirect, err := service.LoginWithLinuxDo(r.URL.Query().Get("code"), r.URL.Query().Get("state"))
session, redirect, err := service.LoginWithLinuxDo(r, r.URL.Query().Get("code"), r.URL.Query().Get("state"))
if err != nil {
http.Redirect(w, r, loginRedirect(redirect, "", err.Error()), http.StatusFound)
http.Redirect(w, r, loginRedirect(r, redirect, "", err.Error()), http.StatusFound)
return
}
http.Redirect(w, r, loginRedirect(redirect, session.Token, ""), http.StatusFound)
http.Redirect(w, r, loginRedirect(r, redirect, session.Token, ""), http.StatusFound)
}
func AdminLogin(w http.ResponseWriter, r *http.Request) {
@@ -124,7 +124,7 @@ func AdminSaveUser(w http.ResponseWriter, r *http.Request) {
OK(w, user)
}
func loginRedirect(redirect string, token string, message string) string {
func loginRedirect(r *http.Request, redirect string, token string, message string) string {
values := url.Values{}
if strings.TrimSpace(token) != "" {
values.Set("token", token)
@@ -135,7 +135,7 @@ func loginRedirect(redirect string, token string, message string) string {
if strings.TrimSpace(redirect) != "" {
values.Set("redirect", redirect)
}
return "/login?" + values.Encode()
return service.RequestOrigin(r) + "/login?" + values.Encode()
}
func AdminDeleteUser(w http.ResponseWriter, r *http.Request, id string) {