mirror of
https://github.com/acepanel/panel.git
synced 2026-02-05 05:47:17 +08:00
64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
package middleware
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/goravel/framework/auth"
|
|
"github.com/goravel/framework/contracts/http"
|
|
"github.com/goravel/framework/facades"
|
|
|
|
"panel/app/models"
|
|
)
|
|
|
|
// Jwt 确保通过 JWT 鉴权
|
|
func Jwt() http.Middleware {
|
|
return func(ctx http.Context) {
|
|
token := ctx.Request().Header("access_token", ctx.Request().Input("access_token", ctx.Request().Header("Sec-WebSocket-Protocol")))
|
|
if len(token) == 0 {
|
|
ctx.Request().AbortWithStatusJson(http.StatusUnauthorized, http.Json{
|
|
"code": 401,
|
|
"message": "未登录",
|
|
})
|
|
return
|
|
}
|
|
|
|
// JWT 鉴权
|
|
if _, err := facades.Auth().Parse(ctx, token); err != nil {
|
|
if errors.Is(err, auth.ErrorTokenExpired) {
|
|
token, err = facades.Auth().Refresh(ctx)
|
|
if err != nil {
|
|
// Refresh time exceeded
|
|
ctx.Request().AbortWithStatusJson(http.StatusOK, http.Json{
|
|
"code": 401,
|
|
"message": "登录已过期",
|
|
})
|
|
return
|
|
}
|
|
|
|
token = "Bearer " + token
|
|
} else {
|
|
ctx.Request().AbortWithStatusJson(http.StatusOK, http.Json{
|
|
"code": 401,
|
|
"message": "登录已过期",
|
|
})
|
|
return
|
|
}
|
|
}
|
|
|
|
// 取出用户信息
|
|
var user models.User
|
|
if err := facades.Auth().User(ctx, &user); err != nil {
|
|
ctx.Request().AbortWithStatusJson(http.StatusForbidden, http.Json{
|
|
"code": 403,
|
|
"message": "用户不存在",
|
|
})
|
|
return
|
|
}
|
|
|
|
ctx.WithValue("user", user)
|
|
|
|
ctx.Response().Header("Authorization", token)
|
|
ctx.Request().Next()
|
|
}
|
|
}
|