55 lines
1.1 KiB
Go
Raw Normal View History

2024-07-11 16:37:26 +08:00
package auth
import (
"errors"
"github.com/loveuer/nf"
"github.com/loveuer/nf/nft/resp"
"strings"
"ultone/internal/controller"
2024-07-19 15:42:26 +08:00
"ultone/internal/database/cache"
2024-07-11 16:37:26 +08:00
"ultone/internal/log"
"ultone/internal/opt"
)
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)
}
2024-07-17 23:05:23 +08:00
log.Debug(c.Context(), "middleware.NewAuth: token=%s", token)
2024-07-11 16:37:26 +08:00
2024-07-18 09:30:54 +08:00
target, err := controller.UserController.GetUserByToken(c.Context(), token)
2024-07-11 16:37:26 +08:00
if err != nil {
2024-07-17 23:05:23 +08:00
log.Error(c.Context(), "middleware.NewAuth: get user by token=%s err=%v", token, err)
2024-07-19 15:42:26 +08:00
if errors.Is(err, cache.ErrorKeyNotFound) {
2024-07-11 16:37:26 +08:00
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()
}
}