Swagger-codegen: [Swift] Obtendo 'CANCELADO' por credenciais incorretas em vez de 401

Criado em 9 jun. 2016  ·  3Comentários  ·  Fonte: swagger-api/swagger-codegen

Descrição

Estou construindo um aplicativo que tem um login usando autenticação básica http. Se as credenciais estiverem corretas, funciona bem. No entanto, para credenciais inválidas, não consigo acessar o código de status (para testar para 401) e os erros localizedDescription mostram: cancelado

Versão Swagger-codegen

gerado online

Conteúdo ou url do arquivo de declaração Swagger
Linha de comando usada para geração

Passos para reproduzir

Faça login usando autenticação HTTP Basic com credenciais incorretas

Assuntos relacionados

Sugira uma correção

passe o código de status mesmo se houver uma falha.

Swift Bug help wanted

Comentários muito úteis

em minha base de código, estou adicionando isso na parte inferior - isso ajuda nesse problema e vou fazer um PR para trazer para esta árvore em breve.

private func processRequest(request: Request, _ managerId: String, _ completion: (response: Response<T>?, error: ErrorType?) -> Void) {

    if let credential = self.credential {
        request.authenticate(usingCredential: credential)
    }

    request.responseJSON(options: .AllowFragments) { response in
        managerStore.removeValueForKey(managerId)

        // AlamoFire doesn't automatically check status responses for error codes
        // so we do it manually here - also we could call validate() on the AlamoFire
        // request but it doesn't put the status code in the error message
        // which isn't too helpful in the client code
        if request.response?.statusCode >= 400 {
            let error = NSError(domain: (request.response?.URL?.URLString)!, code: (request.response?.statusCode)!, userInfo: nil)
            error.log()
            completion(response: nil, error: error)
            return
        }

Todos 3 comentários

@ dylan-colaco estou correto ao dizer que você precisa acessar o código de status da resposta HTTP para determinar a próxima ação em seu aplicativo (por exemplo, pedir aos usuários para tentarem novamente)?

cc @ jaz-ah @Edubits

Sim, está correto. Pelo que posso ver, o código de status da resposta HTTP está acessível apenas para uma resposta bem-sucedida no momento, não para respostas malsucedidas (como 401).

em minha base de código, estou adicionando isso na parte inferior - isso ajuda nesse problema e vou fazer um PR para trazer para esta árvore em breve.

private func processRequest(request: Request, _ managerId: String, _ completion: (response: Response<T>?, error: ErrorType?) -> Void) {

    if let credential = self.credential {
        request.authenticate(usingCredential: credential)
    }

    request.responseJSON(options: .AllowFragments) { response in
        managerStore.removeValueForKey(managerId)

        // AlamoFire doesn't automatically check status responses for error codes
        // so we do it manually here - also we could call validate() on the AlamoFire
        // request but it doesn't put the status code in the error message
        // which isn't too helpful in the client code
        if request.response?.statusCode >= 400 {
            let error = NSError(domain: (request.response?.URL?.URLString)!, code: (request.response?.statusCode)!, userInfo: nil)
            error.log()
            completion(response: nil, error: error)
            return
        }
Esta página foi útil?
0 / 5 - 0 avaliações