OKHttp身份验证器不能与翻新一起使用暂停乐趣

吉尔赫姆·利马·佩雷拉(Guilherme Lima Pereira)

我最近将Retrofit更新为2.7.0OKHttp,3.14.4以利用Retrofit接口上的暂停乐趣。

除此之外,我还试图为刷新令牌逻辑实现Authenticator。

这是改造界面

interface OfficeApi {
    @Authenticated
    @POST
    suspend fun getCharacter(): Response<CharacterResponse>
}

这是我的身份验证器

class CharacterAuthenticator : Authenticator {

    override fun authenticate(
        route: Route?,
        response: Response
    ): Request? {
        if (responseCount(response) >= 2) return null

        return response.request()
                        .newBuilder()
                        .removeHeader("Authorization")
                        .addHeader("Authorization", "Bearer $newToken")
                        .build()

        return null
    }

    private fun responseCount(response: Response?): Int {
        var result = 1
        while (response?.priorResponse() != null) result++
        return result
    }

}

这是改装乐趣

    override suspend fun getCharacter() = safeApiCall(moshiConverter) {
        myApi.getCharacter()
    }

这是safeApiCall

suspend fun <T> safeApiCall(
    moshiConverter: MoshiConverter,
    apiCall: suspend () -> Response<T>
): Result<T?, ResultError.NetworkError> {
    return try {
        val response = apiCall()
        if (response.isSuccessful) Result.Success(response.body())
        else {
            val errorBody = response.errorBody()
            val errorBodyResponse = if (errorBody != null) {
                moshiConverter.fromJsonObject(errorBody.string(), ErrorBodyResponse::class.java)
            } else null

            Result.Error(
                ResultError.NetworkError(
                    httpCode = response.code(),
                    httpMessage = response.message(),
                    serverCode = errorBodyResponse?.code,
                    serverMessage = errorBodyResponse?.message
                )
            )
        }
    } catch (exception: Exception) {
        Result.Error(ResultError.NetworkError(-1, exception.message))
    }
}

身份验证器工作正常,尝试刷新令牌两次,然后放弃。问题是:放弃(返回null)时,改造(safeApiCall功能)的执行不会继续。通话是否成功,我没有任何反馈。

使用Authenticator和Coroutines有什么问题suspend fun吗?

ImNotAnUser

这不是一个无限循环吗?

while (response?.priorResponse() != null)

不是吗

var curResponse: Response? = response
while (curResponse?.priorResponse() != null) {
    result++
    curResponse = curResponse.priorResponse()
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET MVC不能与表单身份验证一起使用

来自分类Dev

授权标头中的多个参数不能与基本身份验证一起使用

来自分类Dev

JWT身份验证可与$ http.get一起使用,但不能与$ http.post一起使用

来自分类Dev

JWT身份验证可与$ http.get一起使用,但不能与$ http.post一起使用

来自分类Dev

WebRTC是否需要“长期凭证”身份验证机制才能与TURN服务器一起使用?

来自分类Dev

身份验证登录模块标志足够不能与两个模块一起使用,但可以单独使用

来自分类Dev

我如何获得与Firebase的身份验证才能与Angular2 FINAL一起使用?

来自分类Dev

身份验证筛选器无法与Web API中的授权筛选器一起使用

来自分类Dev

Spark 1.5.0和委派令牌只能与kerberos或Web身份验证一起发布

来自分类Dev

Git github无法与谷歌身份验证器OSX一起使用

来自分类Dev

使用会话身份验证,通过cursing与Tasty Pie一起进行身份验证

来自分类Dev

与Keepass + Putty一起使用SSH密钥身份验证时的sudo身份验证

来自分类Dev

OkHttp身份验证器

来自分类Dev

为什么序列不能与验证列表一起使用

来自分类Dev

流利的验证WithMessage不能与SetValidator一起正常使用

来自分类Dev

jQuery类选择器不能与动态类选择器一起使用

来自分类Dev

扩展asp.net身份OWIN身份验证框架以与Amazon DynamoDb一起使用

来自分类Dev

cURL可以将存储的身份验证详细信息与DIGEST身份验证一起使用吗?

来自分类Dev

为什么我的$ templateCache设置不能与新的Angular路由器一起使用?

来自分类Dev

为什么多个类选择器不能与removeClass一起使用

来自分类Dev

包含声明的闭包不能与函数构建器“ ViewBuilder”一起使用

来自分类Dev

jQuery选择器不能与变量一起使用

来自分类Dev

post方法不能与zend框架中的窗体装饰器一起使用

来自分类Dev

Rails服务器不能与mysql2 gem一起使用

来自分类Dev

从脚本到PHP解释器的参数传递不能与引号一起使用,为什么?

来自分类Dev

存储的选择器不能与each()一起正确使用

来自分类Dev

为什么我的$ templateCache设置不能与新的Angular路由器一起使用?

来自分类Dev

为什么控制器不能与ng-src一起使用?

来自分类Dev

拦截器不能与JSF管理的Bean一起使用吗?

Related 相关文章

  1. 1

    ASP.NET MVC不能与表单身份验证一起使用

  2. 2

    授权标头中的多个参数不能与基本身份验证一起使用

  3. 3

    JWT身份验证可与$ http.get一起使用,但不能与$ http.post一起使用

  4. 4

    JWT身份验证可与$ http.get一起使用,但不能与$ http.post一起使用

  5. 5

    WebRTC是否需要“长期凭证”身份验证机制才能与TURN服务器一起使用?

  6. 6

    身份验证登录模块标志足够不能与两个模块一起使用,但可以单独使用

  7. 7

    我如何获得与Firebase的身份验证才能与Angular2 FINAL一起使用?

  8. 8

    身份验证筛选器无法与Web API中的授权筛选器一起使用

  9. 9

    Spark 1.5.0和委派令牌只能与kerberos或Web身份验证一起发布

  10. 10

    Git github无法与谷歌身份验证器OSX一起使用

  11. 11

    使用会话身份验证,通过cursing与Tasty Pie一起进行身份验证

  12. 12

    与Keepass + Putty一起使用SSH密钥身份验证时的sudo身份验证

  13. 13

    OkHttp身份验证器

  14. 14

    为什么序列不能与验证列表一起使用

  15. 15

    流利的验证WithMessage不能与SetValidator一起正常使用

  16. 16

    jQuery类选择器不能与动态类选择器一起使用

  17. 17

    扩展asp.net身份OWIN身份验证框架以与Amazon DynamoDb一起使用

  18. 18

    cURL可以将存储的身份验证详细信息与DIGEST身份验证一起使用吗?

  19. 19

    为什么我的$ templateCache设置不能与新的Angular路由器一起使用?

  20. 20

    为什么多个类选择器不能与removeClass一起使用

  21. 21

    包含声明的闭包不能与函数构建器“ ViewBuilder”一起使用

  22. 22

    jQuery选择器不能与变量一起使用

  23. 23

    post方法不能与zend框架中的窗体装饰器一起使用

  24. 24

    Rails服务器不能与mysql2 gem一起使用

  25. 25

    从脚本到PHP解释器的参数传递不能与引号一起使用,为什么?

  26. 26

    存储的选择器不能与each()一起正确使用

  27. 27

    为什么我的$ templateCache设置不能与新的Angular路由器一起使用?

  28. 28

    为什么控制器不能与ng-src一起使用?

  29. 29

    拦截器不能与JSF管理的Bean一起使用吗?

热门标签

归档