First merge from develop to main (WIP) #7

Merged
sugar merged 199 commits from develop into main 2026-01-27 17:47:07 +00:00
2 changed files with 51 additions and 1 deletions
Showing only changes of commit b6003544c8 - Show all commits

View File

@@ -128,6 +128,45 @@ func (self *Token) RefreshAccessToken(refreshToken string) (string, error) {
return self.GenerateAccessToken() return self.GenerateAccessToken()
} }
func (self *Token) RenewRefreshToken(refreshToken string) (string, error) {
err := self.RevokeRefreshToken(refreshToken)
if err != nil {
return "", err
}
refresh, err := self.GenerateRefreshToken()
// Store to redis
ctx := context.Background()
ttl := viper.GetDuration("ttl.refresh_ttl")
// refresh -> user
if err := data.Redis.Set(
ctx,
"refresh:"+refresh,
self.UserID.String(),
ttl,
).Err(); err != nil {
return "", err
}
// user -> refresh tokens
userSetKey := "user:" + self.UserID.String() + ":refresh_tokens"
if err := data.Redis.SAdd(
ctx,
userSetKey,
refresh,
).Err(); err != nil {
return "", err
}
// set user ttl >= all refresh token
_ = data.Redis.Expire(ctx, userSetKey, ttl).Err()
return refresh, nil
}
func (self *Token) RevokeRefreshToken(refreshToken string) error { func (self *Token) RevokeRefreshToken(refreshToken string) error {
ctx := context.Background() ctx := context.Background()

View File

@@ -27,7 +27,18 @@ func Refresh(c *gin.Context) {
return return
} }
err = JwtTool.RevokeRefreshToken(req.RefreshToken)
if err != nil {
c.JSON(500, gin.H{"status": "cannot revoke refresh token"})
}
refresh, err := JwtTool.GenerateRefreshToken()
if err != nil {
c.JSON(401, gin.H{"status": "cannot generate new refresh token"})
}
c.JSON(200, gin.H{ c.JSON(200, gin.H{
"access_token": access, "access_token": access,
"refresh_token": refresh,
}) })
} }