Skip to content

Commit

Permalink
refresh token function
Browse files Browse the repository at this point in the history
  • Loading branch information
Jasmine0108 committed May 25, 2024
1 parent 1411fd1 commit 6a4c97b
Show file tree
Hide file tree
Showing 5 changed files with 288 additions and 20 deletions.
60 changes: 60 additions & 0 deletions internal/services/auth/refresh_token.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package auth

import (
"context"
"database/sql"
"monify/internal/middlewares"

monify "monify/protobuf"

"github.com/google/uuid"
"go.uber.org/zap"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)

func get_userID(ctx context.Context, db *sql.DB, refreshToken string) (uuid.UUID, error) {

query, err := db.QueryContext(ctx, `
SELECT user_id
FROM user_identity
WHERE refresh_token= $1`, refreshToken)
defer query.Close()
if err != nil {
return uuid.Nil, err
}
if !query.Next() {
return uuid.Nil, nil
}
var userId uuid.UUID
err = query.Scan(&userId)
if err != nil {
return uuid.Nil, err
}
return userId, nil

}

func (s Service) RefreshToken(ctx context.Context, req *monify.RefreshTokenRequest) (*monify.RefreshTokenResponse, error) {
db := ctx.Value(middlewares.StorageContextKey{}).(*sql.DB)
logger := ctx.Value(middlewares.LoggerContextKey{}).(*zap.Logger)
userId, err := get_userID(ctx, db, req.RefreshToken)

//它給我refresh token,我要給refresh token + access token
refreshToken, err := generateAndInsertRefreshToken(ctx, userId, db)
if err != nil {
logger.Error("failed to get refresh token", zap.Error(err))
return nil, status.Error(codes.Internal, "internal err.")
}
accessToken, err := GenerateAccessToken(ctx, userId, s.Secret)

if err != nil {
logger.Error("failed to get access token", zap.Error(err))
return nil, status.Error(codes.Internal, "internal err.")

}
return &monify.RefreshTokenResponse{
AccessToken: accessToken,
RefreshToken: refreshToken,
}, nil
}
21 changes: 20 additions & 1 deletion internal/test/auth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package test

import (
"context"
"github.com/stretchr/testify/assert"
monify "monify/protobuf"
"testing"

"github.com/stretchr/testify/assert"
)

func TestLogin(t *testing.T) {
Expand All @@ -18,3 +19,21 @@ func TestLogin(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, res1.UserId, res2.UserId)
}
func TestRefreshToken(t *testing.T) {
email := "[email protected]"
client := GetTestClient(t)
res1, err := client.EmailRegister(context.TODO(), &monify.EmailRegisterRequest{Email: email})
assert.NoError(t, err)
res2, err := client.EmailLogin(context.TODO(), &monify.EmailLoginRequest{Email: email})
assert.NoError(t, err)
assert.Equal(t, res1.UserId, res2.UserId)

tokens1, err := client.RefreshToken(context.TODO(), &monify.RefreshTokenRequest{RefreshToken: res2.RefreshToken})
assert.NoError(t, err)
assert.NotEmpty(t, tokens1)

tokens2, err := client.RefreshToken(context.TODO(), &monify.RefreshTokenRequest{RefreshToken: tokens1.RefreshToken})
assert.NoError(t, err)
assert.NotEmpty(t, tokens2)

}
179 changes: 161 additions & 18 deletions protobuf/auth.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions protobuf/auth.proto
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ option go_package = "github.com/SpeedReach/monify";
service AuthService{
rpc EmailLogin(EmailLoginRequest) returns (EmailLoginResponse) {}
rpc EmailRegister(EmailRegisterRequest) returns (EmailRegisterResponse) {}
rpc RefreshToken(RefreshTokenRequest) returns (RefreshTokenResponse) {}
}


Expand All @@ -29,3 +30,12 @@ message EmailRegisterRequest{
message EmailRegisterResponse{
string userId = 1;
}

message RefreshTokenRequest{
string refreshToken = 1;
}

message RefreshTokenResponse{
string refreshToken = 1;
string accessToken = 2;
}
Loading

0 comments on commit 6a4c97b

Please sign in to comment.