2024-03-31 20:09:20 +08:00

56 lines
1.2 KiB
Go

package auth
import (
"errors"
"gitea.com/taozitaozi/gredis"
"github.com/go-redis/redis/v8"
"github.com/loveuer/nf"
"github.com/loveuer/nf/nft/resp"
"github.com/loveuer/nfflow/internal/controller"
"github.com/loveuer/nfflow/internal/opt"
"github.com/sirupsen/logrus"
"strings"
)
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)
}
logrus.Tracef("middleware.NewAuth: token=%s", token)
target, err := controller.UserController.GetUserByToken(token)
if err != nil {
logrus.Errorf("middleware.NewAuth: get user by token=%s err=%v", token, err)
if errors.Is(err, redis.Nil) || errors.Is(err, gredis.ErrKeyNotFound) {
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()
}
}