带有授权持有者令牌和附加 headers Swift 的 Alamofire 请求

Alamofire request with authorization bearer token and additional headers Swift

我的 API 包括 授权不记名令牌 和另外三个 headers。我的问题是我没有正确发送不记名令牌(邮递员 return 正确的数据不是我的模拟器)。我看到很多使用 request adapter 的示例,但我不能使用它吗?谢谢!

授权实际上是在授权选项卡中,而不是在 header 中。

**更新: 按照文档解决了问题。 HTTP Headers

这是带有工作代码的 Alamofire 函数:

 func getBetsData(completion: ((Bool) -> ())? = nil) {

        guard let token = defaults.string(forKey: "token") else {
            return
        }

        let headers: HTTPHeaders = [
        .authorization(bearerToken: token),
        .init(name: "bet_type", value: type),
        .init(name: "bet_status", value: status),
        .init(name: "page", value: String(page))
    ]

        AF.request("https://example.com", headers: headers).responseDecodable(of: Bets.self) { response in
            switch response.result {
            case .success:
                if let data = response.data {

                    do {
                        let bets = try JSONDecoder().decode(Bets.self, from: data)
                        print("message: \(bets.message)")                      

                        self.setupTableData()
                        completion?(true)
                    } catch {
                        print("Error: \(error)")
                        completion?(false)
                    }
                }
            case.failure(let error):
                print(error)
                completion?(false)
            }
        }
    }

正如 Dilan 提到的那样,只有令牌是不够的,您需要在同一个 Header 参数中使用 Bearer。

这是处理您在应用程序中发送到服务器的所有请求中的令牌请求和重试器的最佳方法之一

https://www.avanderlee.com/swift/authentication-alamofire-request-adapter/

这样你就不需要在所有的网络服务中手动处理令牌了。

您可以直接添加headers:

let headers: HTTPHeaders = [.authorization(bearerToken: token)]

此外,如果您从响应中解码 Decodable 值,则不应使用 responseJSON,因为它会使用 JSONSerialization 解码 Data,然后你只是再次解析它。相反,您应该使用 responseDecodable.

AF.request(...).responseDecodable(of: Bets.self) { response in
    // Use response.
}

这样效率会高很多,并且会自动为您捕获错误。