34 lines
740 B
Go
34 lines
740 B
Go
package login
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/base64"
|
||
|
|
"fmt"
|
||
|
|
|
||
|
|
"github.com/golang-jwt/jwt/v4"
|
||
|
|
"github.com/google/uuid"
|
||
|
|
)
|
||
|
|
|
||
|
|
const RefreshTokenKeyPrefix = "token:refresh:"
|
||
|
|
|
||
|
|
func GenToken(secretKey string, iat int64, expireSeconds int64, payloads map[string]any) (string, error) {
|
||
|
|
claims := make(jwt.MapClaims)
|
||
|
|
claims["exp"] = iat + expireSeconds
|
||
|
|
claims["iat"] = iat
|
||
|
|
for k, v := range payloads {
|
||
|
|
claims[k] = v
|
||
|
|
}
|
||
|
|
|
||
|
|
token := jwt.New(jwt.SigningMethodHS256)
|
||
|
|
token.Claims = claims
|
||
|
|
|
||
|
|
return token.SignedString([]byte(secretKey))
|
||
|
|
}
|
||
|
|
|
||
|
|
func GenRefreshToken() string {
|
||
|
|
return base64.StdEncoding.EncodeToString([]byte(uuid.New().String()))
|
||
|
|
}
|
||
|
|
|
||
|
|
func GenRefreshTokenCacheKey(userId int64) string {
|
||
|
|
return fmt.Sprintf("%s%d", RefreshTokenKeyPrefix, userId)
|
||
|
|
}
|