Всегда получаю 401 при использовании устройства android, но не в Почтальоне - PullRequest
0 голосов
/ 08 апреля 2020

Я отправляю свой токен как Авторизация в Модификации, но я всегда получаю код 401. Но если я использую тот же токен в Почтальоне, я могу получить доступ. Я знаю, что могу получить доступ к webapi, потому что я могу войти в систему просто отлично и могу получить токен из Web Api. Пожалуйста, смотрите мой код ниже:

Интерфейс ApiService

@POST("consolidated/sample")
fun sample(@Header("Authorization") token: String): Call<ResponseBody>

Вызов службы

private fun pushTransactionsToWebApi() {
       val vApiService = ApiServiceBuillder.buildService(ApiService::class.java)
        CoroutineScope(Main).launch {
            var token = SharedDataManager.getInstance(context!!).applicationToken
            var tokenArr = token!!.split(':')
            responseFromApi = tokenArr[1] ==> I use this so I can remove the word "token" at the beginning of the token string
            token = "Bearer ${responseFromApi}"
            Log.i("TAG", "${token}") ==> ####

            val call = vApiService.sample(token)
            if(!call.isExecuted) {
                call.enqueue(object : Callback<ResponseBody>{
                    override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
                        responseFromApi = t.message
                    }

                    override fun onResponse(
                        call: Call<ResponseBody>,
                        response: Response<ResponseBody>
                    ) {
                        if(response.isSuccessful){
                            Toast.makeText(context, "We are OK", Toast.LENGTH_LONG).show()

                        } else {
                            progressDialog!!.dismiss()

                            Toast.makeText(context, "We are NOT OK", Toast.LENGTH_LONG).show()
                        }
                    }
                })
            }
        }
    }

### => Результат в моем Log.i ()

2020-04-08 13: 03: 09.235 14185-14185 / com. kotlin .ambulantlcs I / TAG: Носитель "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..m1mZw79KLIxq4pZPmBRbN7TjILvhvbUIJOCWDEM8I-k"}

* 10 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * не имеет смысла! " 1027 * Что мне нужно сделать? Спасибо!

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Из нашего разговора в комментариях кажется, что вы получаете json {"token": "..."} от SharedDataManager.getInstance(context!!).applicationToken. Это объясняет, почему, когда вы разделяете :, вы печатаетесь в журнале "..."}.

Существует множество способов десериализации json в Android. Вот несколько вариантов. Я думаю, что ванильный путь - это что-то вроде:

val root = JSONObject(SharedDataManager.getInstance(context!!).applicationToken)
val token = root.getString("token")

С этим вы получите токен в token.

Однако, если у вас уже есть библиотека json, вы можете использовать ее. Например, с gson вы можете сделать что-то вроде:

data class TokenData(
   @SerializedName("token")
   val token: String)

val token = Gson().fromJson(
           SharedDataManager.getInstance(context!!).applicationToken,
           TokenData::class.java)

Теперь вы можете использовать token.

С помощью Moshi с использованием библиотеки kotlin gen - com.squareup.moshi:moshi-kotlin-codegen - вы можете определить вышеуказанную модель следующим образом:

@JsonClass(generateAdapter = true)
data class TokenData(
   @Json(name = "token")
   val token: String)

// Then get it like:
val token = Moshi.Builder()
        .build()
        .adapter(TokenData::class.java)
        .fromJson(SharedDataManager.getInstance(context!!).applicationToken)

Это только некоторые варианты. Также есть популярный Джексон . Выберите тот, который лучше всего соответствует вашим потребностям. Надеюсь, это поможет

0 голосов
/ 08 апреля 2020
Remove "  " quotes from token
make sure that keys must be same
pass token like as:

Носитель на предъявителяJJbGciOiJIUZI1NiIsInR5cCI6IkpXVCJ9..m1mZw79KLIxq4pZPmBRbN7TjILvhvbUIJOCWDEM8I-k

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...