Added /refresh endpoint and make some refactor again
This commit is contained in:
@@ -6,16 +6,17 @@ import (
|
||||
"fmt"
|
||||
|
||||
db "git.ego.freeddns.org/egommerce/identity-service/pkg/database"
|
||||
|
||||
"github.com/go-redis/redis/v8"
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
)
|
||||
|
||||
var (
|
||||
AuthService *Auth
|
||||
jwtSrv *JWT
|
||||
|
||||
ErrLoginIncorrect = errors.New("login incorrect")
|
||||
ErrUnableToCacheToken = errors.New("unable to save token in cache")
|
||||
ErrInvalidAccessToken = errors.New("invalid access token")
|
||||
)
|
||||
|
||||
func init() {
|
||||
@@ -48,13 +49,30 @@ func (a *Auth) Login(login, passwd string) (string, error) {
|
||||
|
||||
accessToken, _ := jwtSrv.CreateAccessToken(id)
|
||||
refreshToken, _ := jwtSrv.CreateRefreshToken(id)
|
||||
if err = a.saveTokensToCache(accessToken, refreshToken, id); err != nil {
|
||||
if err = a.saveTokensToCache(id, accessToken, refreshToken); err != nil {
|
||||
return "", ErrUnableToCacheToken
|
||||
}
|
||||
|
||||
return accessToken, nil
|
||||
}
|
||||
|
||||
func (a *Auth) RefreshToken(accessToken string) (string, error) {
|
||||
token, claims, err := jwtSrv.ValidateAccessToken(accessToken)
|
||||
if err != nil || !token.Valid {
|
||||
return "", ErrInvalidAccessToken
|
||||
}
|
||||
|
||||
id := claims["sub"]
|
||||
|
||||
newAccessToken, _ := jwtSrv.CreateAccessToken(id.(string))
|
||||
newRefreshToken, _ := jwtSrv.CreateRefreshToken(id.(string))
|
||||
if err = a.saveTokensToCache(id.(string), newAccessToken, newRefreshToken); err != nil {
|
||||
return "", ErrUnableToCacheToken
|
||||
}
|
||||
|
||||
return newAccessToken, nil
|
||||
}
|
||||
|
||||
func (a *Auth) Register(email, login, passwd string) (string, error) {
|
||||
var id string
|
||||
|
||||
@@ -71,7 +89,7 @@ func (a *Auth) Register(email, login, passwd string) (string, error) {
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func (a *Auth) saveTokensToCache(accessToken, refreshToken, id string) error {
|
||||
func (a *Auth) saveTokensToCache(id, accessToken, refreshToken string) error {
|
||||
res := a.cache.Set(context.Background(), "auth:access_token:"+id, accessToken, accessTokenExpireTime)
|
||||
if err := res.Err(); err != nil {
|
||||
fmt.Println("failed to save access token in redis: ", err.Error())
|
||||
|
||||
Reference in New Issue
Block a user