From c97ec8f1119616fb28a0274b1fbdf55b1f563d24 Mon Sep 17 00:00:00 2001 From: Aofei Sheng Date: Fri, 18 Oct 2024 09:30:32 +0800 Subject: [PATCH] refactor(auth): remove refresh token expiration handling - Remove handling of refresh token expiration as Casdoor never returns `refresh_expires_in`[^1]. - Treat refresh tokens as always valid as they are renewed with each access token refresh[^2]. - Return `401 Unauthorized` instead of `500 Internal Server Error` when JWT parsing fails. [^1]: https://github.com/casdoor/casdoor/blob/6f1f93725e77c8288aa0ac1c0d996feff906ddcf/object/token_oauth.go#L383-L390 [^2]: https://github.com/casdoor/casdoor/blob/6f1f93725e77c8288aa0ac1c0d996feff906ddcf/object/token_oauth.go#L351-L376 Signed-off-by: Aofei Sheng --- spx-backend/internal/controller/user.go | 2 +- spx-backend/internal/controller/user_test.go | 2 +- .../community/user/FollowButton.vue | 2 +- .../src/components/navbar/NavbarProfile.vue | 13 ++-- .../components/project/ProjectCreateModal.vue | 7 ++- spx-gui/src/pages/community/home.vue | 16 ++--- spx-gui/src/pages/editor/index.vue | 18 +++--- spx-gui/src/stores/user.ts | 63 +++++++------------ 8 files changed, 56 insertions(+), 67 deletions(-) diff --git a/spx-backend/internal/controller/user.go b/spx-backend/internal/controller/user.go index 75ce3626..2c598b42 100644 --- a/spx-backend/internal/controller/user.go +++ b/spx-backend/internal/controller/user.go @@ -69,7 +69,7 @@ func ensureUser(ctx context.Context, expectedUserID int64) (*model.User, error) func (ctrl *Controller) UserFromToken(ctx context.Context, token string) (*model.User, error) { claims, err := ctrl.casdoorClient.ParseJwtToken(token) if err != nil { - return nil, fmt.Errorf("ctrl.casdoorClient.ParseJwtToken failed: %w", err) + return nil, fmt.Errorf("ctrl.casdoorClient.ParseJwtToken failed: %w: %w", ErrUnauthorized, err) } mUser, err := model.FirstOrCreateUser(ctx, ctrl.db, claims.Name) if err != nil { diff --git a/spx-backend/internal/controller/user_test.go b/spx-backend/internal/controller/user_test.go index 43798a14..9ea5fc45 100644 --- a/spx-backend/internal/controller/user_test.go +++ b/spx-backend/internal/controller/user_test.go @@ -133,7 +133,7 @@ func TestControllerUserFromToken(t *testing.T) { _, err := ctrl.UserFromToken(context.Background(), "invalid-token") require.Error(t, err) - assert.EqualError(t, err, "ctrl.casdoorClient.ParseJwtToken failed: token contains an invalid number of segments") + assert.EqualError(t, err, "ctrl.casdoorClient.ParseJwtToken failed: unauthorized: token contains an invalid number of segments") }) } diff --git a/spx-gui/src/components/community/user/FollowButton.vue b/spx-gui/src/components/community/user/FollowButton.vue index aff43d6d..d7a81fd7 100644 --- a/spx-gui/src/components/community/user/FollowButton.vue +++ b/spx-gui/src/components/community/user/FollowButton.vue @@ -10,7 +10,7 @@ const props = defineProps<{ name: string }>() -const followable = computed(() => props.name !== useUserStore().userInfo?.name) +const followable = computed(() => props.name !== useUserStore().userInfo()?.name) const following = ref(null) watch( diff --git a/spx-gui/src/components/navbar/NavbarProfile.vue b/spx-gui/src/components/navbar/NavbarProfile.vue index ac6def26..9f7f8881 100644 --- a/spx-gui/src/components/navbar/NavbarProfile.vue +++ b/spx-gui/src/components/navbar/NavbarProfile.vue @@ -1,5 +1,5 @@