首页 > 解决方案 > 具有基本身份验证流程问题的 Alamofire 重新身份验证

问题描述

我有一个 Alamofire Authenticator 协议的实现,它试图处理用户会话在后端过期的情况。

我们正在使用基本身份验证,这需要我们向后端发送自定义登录请求方法。

看起来,在当前的实现中,我们在收到 401 后被阻止发送自定义登录请求。

在下面附加的代码中,两行(标记为 #1 和 #2)是放置 Authenticator 的完成处理程序代码的不同位置。

理想情况下,#1 应该是那里唯一的值,但如果在登录请求发布之前没有完成,那么 alamofire 队列会备份。

所以我的问题是,这是处理自定义基本身份验证握手的重新身份验证的正确方法(有或没有#2),如果不是,我应该看什么来绕过登录请求上的这种阻塞行为?

import Foundation
import MoovementAPI
import Alamofire
import UIKit


class NoCredential: AuthenticationCredential {
    var requiresRefresh: Bool { false }
}

class DelegatingAuthenticator: Authenticator {

    public func apply(_ credential: NoCredential, to urlRequest: inout URLRequest) {}

    public func refresh(_ credential: NoCredential, for session: Session, completion: @escaping (Result<NoCredential, Error>) -> ()) {
        Auth.auth()
        DispatchQueue.main.asyncIfNeeded {
            (UIApplication.shared.delegate as! AppDelegate).appStateController.authenticate() {
                [weak self] in
                completion(.success(credential)). // #1
            }
        }
        completion(.success(credential))        // #2
    }

    public func didRequest(_ urlRequest: URLRequest, with response: HTTPURLResponse, failDueToAuthenticationError error: Error) -> Bool {
        response.statusCode == 401
    }

    public func isRequest(_ urlRequest: URLRequest, authenticatedWith credential: NoCredential) -> Bool {
        true
    }
}

标签: swiftalamofire

解决方案


推荐阅读