This commit is contained in:
Shikong 2022-10-06 22:22:54 +08:00
parent 40f98a050f
commit 4b522259ec
3 changed files with 18 additions and 5 deletions

View File

@ -32,6 +32,14 @@ func ParseError(err error) error {
return nil return nil
} }
func ParseErrorWithCode(code int, err error) error {
if err != nil {
return NewErrorWithCode(code, err.Error())
}
return nil
}
func NewDefaultError(msg string) error { func NewDefaultError(msg string) error {
return NewErrorWithCode(response.ERROR, msg) return NewErrorWithCode(response.ERROR, msg)
} }

View File

@ -66,12 +66,12 @@ func (c *Controller) RefreshToken() {
c.Router.Post("refreshToken", func(ctx *fiber.Ctx) error { c.Router.Post("refreshToken", func(ctx *fiber.Ctx) error {
refresh := &dto.RefreshToken{} refresh := &dto.RefreshToken{}
err := ctx.BodyParser(refresh) err := ctx.BodyParser(refresh)
if err = errorx.ParseError(err); err != nil { if err = errorx.ParseErrorWithCode(fiber.StatusUnauthorized, err); err != nil {
return ctx.JSON(err) return ctx.JSON(err)
} }
result, err := auth.Services.RefreshToken(refresh.RefreshToken) result, err := auth.Services.RefreshToken(refresh.RefreshToken)
if err = errorx.ParseError(err); err != nil { if err = errorx.ParseErrorWithCode(fiber.StatusUnauthorized, err); err != nil {
return ctx.JSON(err) return ctx.JSON(err)
} }

View File

@ -32,6 +32,9 @@ func InitService() {
Services = &Service{} Services = &Service{}
} }
// generateAndSaveRefreshToken
//
// 生成并保存 refreshToken 刷新令牌
func (s *Service) generateAndSaveRefreshToken(user *models.User) (refreshToken string, err error) { func (s *Service) generateAndSaveRefreshToken(user *models.User) (refreshToken string, err error) {
refreshToken, err = global.GetNanoId() refreshToken, err = global.GetNanoId()
if err != nil { if err != nil {
@ -73,13 +76,15 @@ func (s *Service) Login(login *dto.Login) (result *vo.Login, err error) {
} }
func (s *Service) RefreshToken(refreshToken string) (result *vo.Login, err error) { func (s *Service) RefreshToken(refreshToken string) (result *vo.Login, err error) {
refreshToken = RefreshTokenPrefix + refreshToken
ctx := context.Background() ctx := context.Background()
data, err := global.Redis.Get(ctx, RefreshTokenPrefix+refreshToken).Result() data, err := global.Redis.Get(ctx, refreshToken).Result()
if err != nil { if err != nil {
return nil, InvalidRefreshToken return nil, InvalidRefreshToken
} }
global.Redis.Del(ctx, RefreshTokenPrefix+refreshToken) global.Redis.Del(ctx, refreshToken)
cache := &models.User{} cache := &models.User{}
err = json.Unmarshal([]byte(data), cache) err = json.Unmarshal([]byte(data), cache)
@ -90,7 +95,7 @@ func (s *Service) RefreshToken(refreshToken string) (result *vo.Login, err error
user := &models.User{Id: cache.Id, Account: cache.Account} user := &models.User{Id: cache.Id, Account: cache.Account}
exist, err := global.DataSources.Get(user) exist, err := global.DataSources.Get(user)
if !exist { if !exist {
logger.Log.Infof("未能从 %s 找到用户信息", RefreshTokenPrefix+refreshToken) logger.Log.Infof("未能从 %s 找到用户信息", refreshToken)
return nil, InvalidRefreshToken return nil, InvalidRefreshToken
} }