mingyang-admin-iot-app/rpc/internal/logic/user/logout_user_logic.go

51 lines
1.4 KiB
Go

package user
import (
"context"
"mingyang-admin-app-rpc/internal/jwt_manager"
"mingyang-admin-app-rpc/internal/util/dberrorhandler"
"time"
"mingyang-admin-app-rpc/internal/svc"
"mingyang-admin-app-rpc/types/app"
"github.com/zeromicro/go-zero/core/logx"
)
type LogoutUserLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
jwtManager *jwt_manager.JWTManager
}
func NewLogoutUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LogoutUserLogic {
return &LogoutUserLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
jwtManager: jwt_manager.NewJWTManager(&svcCtx.Config.JWTConf, svcCtx.Redis),
}
}
// LogoutUser 用户退出登录
func (l *LogoutUserLogic) LogoutUser(in *app.UserToken) (*app.LogoutUserRequest, error) {
// 记录开始时间
start := time.Now()
l.Logger.Info("LogoutUser started token =", in.AccessToken)
accessToken := in.GetAccessToken()
_, err := l.jwtManager.VerifyAccessToken(accessToken)
if err != nil {
l.Logger.Error("Verify access token failed", "error", err, "time", time.Since(start))
return nil, dberrorhandler.DefaultEntError(l.Logger, err, in)
}
err = l.jwtManager.BlacklistToken(accessToken)
if err != nil {
l.Logger.Error("Blacklist token failed", "error", err, "time", time.Since(start))
return nil, dberrorhandler.DefaultEntError(l.Logger, err, in)
}
return &app.LogoutUserRequest{
AccessToken: accessToken,
}, nil
}