Проверьте, является ли объект JSON пустым в аутентификации JWT для WP REST API - PullRequest
0 голосов
/ 01 мая 2019

Я использую плагин " JWT Authentication для WP REST API " для входа в мой wordpress в iOS.

Когда учетные данные верны, я получаю ответ отсервер:

{
    "token": "eyJ0eXAiOiJKV1QiLCJhbG...",
    "user_email": "test@myhost.com",
    "user_id": 1
}

Если данные неверны, я получаю ответ от сервера:

{
    "code": "[jwt_auth] incorrect_password",
    "message": "<strong>ERROR</strong>: Incorrect password",
    "data": {
        "status": 403
    }
}

Как я проверяю, например, когда данные верны, нет'code' и если данные верны, нет 'токена'

Я пробовал как, но он не работает

let jsonObject = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary

if jsonObject["token"] == nil {
    print("error password")
} else {
}

1 Ответ

0 голосов
/ 01 мая 2019

Прежде всего используйте Decodable.

Создайте Response как enum с регистрами success и failure и связанными типами TokenData и ErrorData

enum Response : Decodable {

    case success(TokenData)
    case failure(ErrorData)

    init(from decoder: Decoder) throws {
        let container = try decoder.singleValueContainer()
        do {
            self = try .success(container.decode(TokenData.self))
        } catch DecodingError.keyNotFound {
            self = try .failure(container.decode(ErrorData.self))
        }
    }
}

struct TokenData : Decodable {
    let token, userEmail : String
    let userId : Int
}

struct ErrorData : Decodable {
    let code, message : String
}

let jsonSuccessString = """
{
"token": "eyJ0eXAiOiJKV1QiLCJhbG...",
"user_email": "test@myhost.com",
"user_id": 1
}
"""

let jsonFailureString = """
{
"code": "[jwt_auth] incorrect_password",
"message": "<strong>ERROR</strong>: Incorrect password",
"data": {
"status": 403
}
}
"""

Расшифруйте JSON и включите результат, пример декодирует обе строки для демонстрации

let successdata = Data(jsonSuccessString.utf8)
let failuredata = Data(jsonFailureString.utf8)

do {
    let decoder = JSONDecoder()
    decoder.keyDecodingStrategy = .convertFromSnakeCase

    let result1 = try decoder.decode(Response.self, from: successdata)
    switch result1 {
        case .success(let tokenData) : print(tokenData) // TokenData(token: "eyJ0eXAiOiJKV1QiLCJhbG...", userEmail: "test@myhost.com", userId: 1)
        case .failure(let errorData) : print(errorData)
    }

    let result2 = try decoder.decode(Response.self, from: failuredata)
    switch result2 {
        case .success(let tokenData) : print(tokenData)
        case .failure(let errorData) : print(errorData) // ErrorData(code: "[jwt_auth] incorrect_password", message: "<strong>ERROR</strong>: Incorrect password")
    }
} catch {
    print(error)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...