Skip to content

Commit a2a34b7

Browse files
Merge pull request #418 from supertokens/fix/always_clear_in_401_refreshes
test: move the session object and claims to the BE sdk server
2 parents 9284b83 + 06107f0 commit a2a34b7

File tree

4 files changed

+32
-18
lines changed

4 files changed

+32
-18
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [unreleased]
99

10+
## [0.22.1] - 2024-07-09
11+
12+
### Changes
13+
14+
- `refreshPOST` and `RefreshSession` now clears all user tokens upon CSRF failures and if no tokens are found. See the latest comment on https://github.com/supertokens/supertokens-node/issues/141 for more details.
15+
1016
## [0.22.0] - 2024-06-24
1117

1218
### Breaking change

recipe/emailpassword/authMode_test.go

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,14 +1145,14 @@ func TestRefreshTokenBehaviour(t *testing.T) {
11451145
setTokens string
11461146
clearedTokens string
11471147
}{
1148-
{getTokenTransferMethodRes: "any", authHeader: false, authCookie: false, output: "unauthorised", setTokens: "none", clearedTokens: "none"},
1149-
{getTokenTransferMethodRes: "header", authHeader: false, authCookie: false, output: "unauthorised", setTokens: "none", clearedTokens: "none"},
1150-
{getTokenTransferMethodRes: "cookie", authHeader: false, authCookie: false, output: "unauthorised", setTokens: "none", clearedTokens: "none"},
1148+
{getTokenTransferMethodRes: "any", authHeader: false, authCookie: false, output: "unauthorised", setTokens: "none", clearedTokens: "both"},
1149+
{getTokenTransferMethodRes: "header", authHeader: false, authCookie: false, output: "unauthorised", setTokens: "none", clearedTokens: "both"},
1150+
{getTokenTransferMethodRes: "cookie", authHeader: false, authCookie: false, output: "unauthorised", setTokens: "none", clearedTokens: "both"},
11511151
{getTokenTransferMethodRes: "any", authHeader: false, authCookie: true, output: "validatecookie", setTokens: "cookies", clearedTokens: "none"},
1152-
{getTokenTransferMethodRes: "header", authHeader: false, authCookie: true, output: "unauthorised", setTokens: "none", clearedTokens: "none"},
1152+
{getTokenTransferMethodRes: "header", authHeader: false, authCookie: true, output: "unauthorised", setTokens: "none", clearedTokens: "both"},
11531153
{getTokenTransferMethodRes: "cookie", authHeader: false, authCookie: true, output: "validatecookie", setTokens: "cookies", clearedTokens: "none"},
11541154
{getTokenTransferMethodRes: "any", authHeader: true, authCookie: false, output: "validateheader", setTokens: "headers", clearedTokens: "none"},
1155-
{getTokenTransferMethodRes: "header", authHeader: true, authCookie: false, output: "validateheader", setTokens: "headers", clearedTokens: "none"},
1155+
{getTokenTransferMethodRes: "header", authHeader: true, authCookie: false, output: "validateheader", setTokens: "headers", clearedTokens: "both"},
11561156
{getTokenTransferMethodRes: "cookie", authHeader: true, authCookie: false, output: "unauthorised", setTokens: "none", clearedTokens: "none"},
11571157
{getTokenTransferMethodRes: "any", authHeader: true, authCookie: true, output: "validateheader", setTokens: "headers", clearedTokens: "cookies"},
11581158
{getTokenTransferMethodRes: "header", authHeader: true, authCookie: true, output: "validateheader", setTokens: "headers", clearedTokens: "cookies"},
@@ -1224,6 +1224,13 @@ func TestRefreshTokenBehaviour(t *testing.T) {
12241224
assert.Equal(t, refreshRes["accessTokenExpiry"], "Thu, 01 Jan 1970 00:00:00 GMT")
12251225
assert.Empty(t, refreshRes["sRefreshToken"])
12261226
assert.Equal(t, refreshRes["refreshTokenExpiry"], "Thu, 01 Jan 1970 00:00:00 GMT")
1227+
} else if behaviour.clearedTokens == "both" {
1228+
assert.Empty(t, refreshRes["accessTokenFromHeader"])
1229+
assert.Empty(t, refreshRes["refreshTokenFromHeader"])
1230+
assert.Empty(t, refreshRes["sAccessToken"])
1231+
assert.Equal(t, refreshRes["accessTokenExpiry"], "Thu, 01 Jan 1970 00:00:00 GMT")
1232+
assert.Empty(t, refreshRes["sRefreshToken"])
1233+
assert.Equal(t, refreshRes["refreshTokenExpiry"], "Thu, 01 Jan 1970 00:00:00 GMT")
12271234
}
12281235

12291236
switch behaviour.setTokens {
@@ -1247,17 +1254,18 @@ func TestRefreshTokenBehaviour(t *testing.T) {
12471254
}
12481255
}
12491256

1250-
if behaviour.setTokens != "cookies" && behaviour.clearedTokens != "cookies" {
1251-
assert.Equal(t, refreshRes["sAccessToken"], "-not-present-")
1252-
assert.Equal(t, refreshRes["accessTokenExpiry"], "-not-present-")
1253-
assert.Equal(t, refreshRes["sRefreshToken"], "-not-present-")
1254-
assert.Equal(t, refreshRes["refreshTokenExpiry"], "-not-present-")
1255-
}
1256-
if behaviour.setTokens != "headers" && behaviour.clearedTokens != "headers" {
1257-
assert.Equal(t, refreshRes["accessTokenFromHeader"], "-not-present-")
1258-
assert.Equal(t, refreshRes["refreshTokenFromHeader"], "-not-present-")
1257+
if behaviour.setTokens != "both" {
1258+
if behaviour.setTokens != "cookies" && behaviour.clearedTokens != "cookies" {
1259+
assert.Equal(t, refreshRes["sAccessToken"], "-not-present-")
1260+
assert.Equal(t, refreshRes["accessTokenExpiry"], "-not-present-")
1261+
assert.Equal(t, refreshRes["sRefreshToken"], "-not-present-")
1262+
assert.Equal(t, refreshRes["refreshTokenExpiry"], "-not-present-")
1263+
}
1264+
if behaviour.setTokens != "headers" && behaviour.clearedTokens != "headers" {
1265+
assert.Equal(t, refreshRes["accessTokenFromHeader"], "-not-present-")
1266+
assert.Equal(t, refreshRes["refreshTokenFromHeader"], "-not-present-")
1267+
}
12591268
}
1260-
12611269
})
12621270

12631271
t.Run(fmt.Sprintf("behaviour %v with invalid token", behaviour), func(t *testing.T) {

recipe/session/sessionRequestFunctions.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ func RefreshSessionInRequest(req *http.Request, res http.ResponseWriter, config
386386
False := false
387387
return nil, errors.UnauthorizedError{
388388
Msg: "Refresh token not found. Are you sending the refresh token in the request as a cookie?",
389-
ClearTokens: &False,
389+
ClearTokens: &True,
390390
}
391391
}
392392

@@ -406,7 +406,7 @@ func RefreshSessionInRequest(req *http.Request, res http.ResponseWriter, config
406406

407407
if ridFromHeader == nil {
408408
supertokens.LogDebugMessage("refreshSession: Returning UNAUTHORISED because custom header (rid) was not passed")
409-
clearTokens := false
409+
clearTokens := true
410410
return nil, errors.UnauthorizedError{
411411
Msg: "anti-csrf check failed. Please pass 'rid: \"session\"' header in the request.",
412412
ClearTokens: &clearTokens,

supertokens/constants.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const (
2121
)
2222

2323
// VERSION current version of the lib
24-
const VERSION = "0.22.0"
24+
const VERSION = "0.22.1"
2525

2626
var (
2727
cdiSupported = []string{"3.0"}

0 commit comments

Comments
 (0)