go RefreshToken实现 login:unc (self *MallFacade) LoginAdmin(c *gin.Context) error { auser : new(entityuser.AuthUser) if err : c.BindJSON(auser); err ! nil { common.ResFailUserMsg(c, 参数错误) return err } // 设置只查询 user_type 300 的用户商城后台管理员 auser.UserTypes []int16{300} var user, err FindBeanUserDaoFacade().Auth(auser, c) if err ! nil { golog.Error(MallFacade LoginAdmin failed: , err) if businessErr, ok : common.IsErrorAsBusiness(err); ok { common.ResFailed(c, businessErr.Code, err) } else { common.ResFailUserMsg(c, err.Error()) } return err } if !user.IfMallAdmin() { golog.Error(MallFacade LoginAdmin不是合法用户!, user.ID, user.Name) common.ResFailUserMsg(c, 无权限登录) return err } token, err : authentication.FindBeanJWTService().CreateToken(user, apiconst.TOKEN_APP_KEY_MALL_ADMIN) if err ! nil { golog.Error(MallFacade LoginAdmin failed:, err) common.ResFailUserMsg(c, 登录失败) return err } refreshToken, err : authentication.FindBeanJWTService().CreateTokenExpire(common.RefreshExpireHours, user, apiconst.TOKEN_APP_KEY_MALL_ADMIN) if err ! nil { golog.Error(MallFacade LoginAdmin refreshToken failed:, err) common.ResFailUserMsg(c, 登录失败) return err } apiservice.FindBeanUserService().SetSingleToken(c, user.ID, token, apiconst.TOKEN_APP_KEY_MALL_ADMIN) common.ResOk(c, entityuser.LoginInfo{ Name: user.Name, User: entityuser.ToLoginUserInfoVo(user), JWTToken: trainvo.JWTToken{ Token: token, CreateAt: time.Now(), ExpiresIn: common.ExpireHours, Describe: set token in Authorization Header, [Authorization: Bearer {token}], RefreshToken: refreshToken, RefreshExpire: common.RefreshExpireHours, }, }) return nil }func (s *JWTService) CreateTokenExpire(expire time.Duration, user *entityuser.User, app string) (string, error) { if user nil { return , fmt.Errorf(empty user) } now : time.Now() token : jwt.NewWithClaims( jwt.SigningMethodHS256, CustomClaims{ Name: user.Name, ID: user.ID, App: app, RegisteredClaims: jwt.RegisteredClaims{ ExpiresAt: jwt.NewNumericDate(now.Add(s.expireDuration)), NotBefore: jwt.NewNumericDate(now.Add(-1000 * time.Second)), ID: strconv.Itoa(int(user.ID)), Issuer: s.issuer, }, }, ) return token.SignedString(s.signKey) }refreshToken:func (self *MallFacade) RefreshToken(c *gin.Context) error { user, err : self.ParseRefreshToken(c) if err ! nil { golog.Error(MallFacade RefreshToken failed:, err) return err } token, err : authentication.FindBeanJWTService().CreateToken(user, apiconst.TOKEN_APP_KEY_MALL_ADMIN) if err ! nil { golog.Error(MallFacade LoginAdmin failed:, err) common.ResFailUserMsg(c, 登录失败) return err } //refreshToken, err : authentication.FindBeanJWTService().CreateTokenExpire(common.RefreshExpireHours, user, apiconst.TOKEN_APP_KEY_MALL_ADMIN) //if err ! nil { // golog.Error(MallFacade LoginAdmin refreshToken failed:, err) // common.ResFailUserMsg(c, 登录失败) // return err //} apiservice.FindBeanUserService().SetSingleToken(c, user.ID, token, apiconst.TOKEN_APP_KEY_MALL_ADMIN) common.ResOk(c, entityuser.LoginInfo{ Name: user.Name, User: entityuser.ToLoginUserInfoVo(user), JWTToken: trainvo.JWTToken{ Token: token, CreateAt: time.Now(), ExpiresIn: common.ExpireHours, Describe: set token in Authorization Header, [Authorization: Bearer {token}], // RefreshToken: refreshToken, // RefreshExpire: common.RefreshExpireHours, }, }) return err }unc (self *MallFacade) ParseRefreshToken(c *gin.Context) (*entityuser.User, error) { var req admindto.RefreshRequest{} if err : self.ParseBody(c, req); err ! nil { golog.Error(MallFacade RefreshToken failed:, err) common.ResFailUserMsg(c, 参数错误) return nil, err } user, isExpire, app, parseErr : authentication.FindBeanJWTService().ParseToken(req.RefreshToken) if parseErr ! nil { golog.Error(MallFacade RefreshToken failed:, parseErr, app) common.ResFailUserMsg(c, 刷新失败) return nil, parseErr } if isExpire { golog.Error(MallFacade RefreshToken expired token:, req.RefreshToken) common.ResFailUserMsg(c, 刷新token过期) return nil, parseErr } if user nil { golog.Error(MallFacade RefreshToken user is nil:, req.RefreshToken) common.ResFailUserMsg(c, 刷新token错误) return nil, parseErr } userRet : apiservice.FindBeanUserService().FindById(user.ID) if userRet.IsFailed() { golog.Error(MallFacade RefreshToken user is failed:, userRet) common.ResFailUserMsg(c, 刷新token错误) return nil, userRet.Result2Error() } if !userRet.ExistRecord() { golog.Error(MallFacade RefreshToken user is not exist:, req.RefreshToken) common.ResFailUserMsg(c, 刷新token错误) return nil, fmt.Errorf(user is not exist) } return user, nil }ParseToken:unc (s *JWTService) ParseToken(tokenString string) (*entityuser.User, bool, string, error) { isExpire : true token, err : jwt.ParseWithClaims(tokenString, CustomClaims{}, func(token *jwt.Token) (i interface{}, err error) { return s.signKey, nil }) if err ! nil { golog.Error(jwt.ParseWithClaims err: , err) return nil, isExpire, , err } claims, ok : token.Claims.(*CustomClaims) if !ok || !token.Valid { golog.Error(jwt.ParseWithClaims err: %v, err) return nil, isExpire, , fmt.Errorf(invaild token) } now : time.Now() isExpire claims.ExpiresAt.Time.Before(now) user : entityuser.User{ ID: claims.ID, Name: claims.Name, } return user, isExpire, claims.App, nil }

相关新闻

最新新闻

从数据囚徒到记忆主人:WeChatMsg如何重塑你的数字人生档案

从数据囚徒到记忆主人:WeChatMsg如何重塑你的数字人生档案

从数据囚徒到记忆主人:WeChatMsg如何重塑你的数字人生档案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…

2026/7/18 15:10:32
C++编译错误C3861:标识符未找到的根源与系统排查指南

C++编译错误C3861:标识符未找到的根源与系统排查指南

1. 项目概述:C3861错误究竟是什么?如果你在用Visual Studio写C代码,编译时突然蹦出来一个“error C3861: ‘identifier’: identifier not found”,心里是不是咯噔一下?这个错误信息直白得有点伤人:“标识符…

2026/7/18 15:10:32
如何永久保存微信聊天记录?一个完全免费的本地备份解决方案

如何永久保存微信聊天记录?一个完全免费的本地备份解决方案

如何永久保存微信聊天记录?一个完全免费的本地备份解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/…

2026/7/18 15:10:32
VLA模型实操地形图:102个可跑通模型+26个高质量数据集+12个仿真平台深度评测

VLA模型实操地形图:102个可跑通模型+26个高质量数据集+12个仿真平台深度评测

1. 这不是一份“综述”,而是一份VLA领域实操者手写的地形图 我花三个月时间,把当前公开可查、有代码/论文/技术报告支撑的102个VLA(Vision-Language-Action)模型、26个主流与新兴数据集、12个仿真平台全部拉出来,逐个…

2026/7/18 15:10:32
如何永久备份微信聊天记录:3步实现完整数据保存的终极指南

如何永久备份微信聊天记录:3步实现完整数据保存的终极指南

如何永久备份微信聊天记录:3步实现完整数据保存的终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…

2026/7/18 15:10:32
终极GTA5菜单工具YimMenu:5分钟快速上手完全指南

终极GTA5菜单工具YimMenu:5分钟快速上手完全指南

终极GTA5菜单工具YimMenu:5分钟快速上手完全指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …

2026/7/18 15:05:32

月新闻