Hi guys, I'm facing an issue with refreshTokens fo...
# ktor
e
Hi guys, I'm facing an issue with refreshTokens for bearer authentication. Here is my Auth config
Copy code
install(Auth) {
    bearer {
        loadTokens {
            BearerTokens(
                accessToken = localService.getBearerToken().orEmpty(),
                refreshToken = localService.getRefreshToken().orEmpty()
            )
        }
        refreshTokens {
            val token = client.get {
                url("refreshToken")
                parameter("refreshToken", localService.getRefreshToken())
            }.body<Token>()
            BearerTokens(
                accessToken = token.bearerToken,
                refreshToken = token.refreshToken
            )
        }
        sendWithoutRequest {
            it.url.host == "<http://10.0.2.2:8080/login>"
        }
    }
}
refreshTokens block is not triggering what am i missing?
a
Can you share the response from the server with 401 status code?
e
Yes
RESPONSE: 401 Unauthorized
METHOD: HttpMethod(value=GET) FROM: http://10.0.2.2:8080/authHello COMMON HEADERS -> connection: keep-alive -> content-length: 13 -> content-type: text/plain; charset=UTF-8 -> www-authenticate: Bearer -> x-android-received-millis: 1684229673946 -> x-android-response-source: NETWORK 401 -> x-android-selected-protocol: http/1.1 -> x-android-sent-millis: 1684229673929 BODY Content-Type: text/plain; charset=UTF-8 BODY START Unauthorized! BODY END
l
have you declared
markAsRefreshTokenRequest()
on your
HttpRequestBuilder
?
🙌 1
e
@leandro I tried but it didn't work
Copy code
refreshTokens {
    Log.e("REFRESH","triggered")
    val token = client.get {
        markAsRefreshTokenRequest()
        url("refreshToken")
        parameter("refreshToken", localService.getRefreshToken())
    }.body<Token>()
    BearerTokens(
        accessToken = token.bearerToken,
        refreshToken = token.refreshToken
    )
}
l
Could you check again if this
Copy code
sendWithoutRequest {
    it.url.host == "<http://10.0.2.2:8080/login>"
 }
is what do you mean? host usually does not include protocol nor port i suspect this check can be the issue. Please change it to
Copy code
!it.url.encodedPath.contains("/login")
to validate
e
Thanks @leandro it works 🙂