2024-12-19 15:03:36 +08:00

55 lines
1.1 KiB
Go

package auth
import (
"errors"
"strings"
"esway/internal/controller"
"esway/internal/database/cache"
"esway/internal/log"
"esway/internal/opt"
"github.com/loveuer/nf"
"github.com/loveuer/nf/nft/resp"
)
var tokenFunc = func(c *nf.Ctx) string {
token := c.Get("Authorization")
if token == "" {
token = c.Cookies(opt.CookieName)
}
return token
}
func NewAuth() nf.HandlerFunc {
return func(c *nf.Ctx) error {
token := tokenFunc(c)
if token = strings.TrimPrefix(token, "Bearer "); token == "" {
return resp.Resp401(c, token)
}
log.Debug(c.Context(), "middleware.NewAuth: token=%s", token)
target, err := controller.UserController.GetUserByToken(c.Context(), token)
if err != nil {
log.Error(c.Context(), "middleware.NewAuth: get user by token=%s err=%v", token, err)
if errors.Is(err, cache.ErrorKeyNotFound) {
return resp.Resp401(c, err)
}
return resp.RespError(c, err)
}
if err = target.IsValid(true); err != nil {
return resp.Resp401(c, err.Error(), err.Error())
}
c.Locals("user", target)
c.Locals("token", token)
return c.Next()
}
}