如何使用 Alamofire 为每个请求添加 auth 标头,如果响应为 401 则执行某些操作?

Posted

技术标签:

【中文标题】如何使用 Alamofire 为每个请求添加 auth 标头,如果响应为 401 则执行某些操作?【英文标题】:How can I use Alamofire to add auth header to each request, and do something if the response is 401? 【发布时间】:2018-01-01 13:44:13 【问题描述】:

如何使用 Alamofire 网络框架为每个请求添加 Authorization 标头,并检查服务器的响应是否为 401,以便我可以相应地进行逻辑处理,并呈现某种登录视图。

我需要创建某种包装 Alamofire 请求的 HttpService 类吗?还是有更内置的方法?

【问题讨论】:

看看learnwithmehere.blogspot.in/2016/09/… 【参考方案1】:

根据您的要求,我个人更喜欢有一个中间类来调用 Alamofire 的方法。

为此,您可以在每个 Web 服务调用中添加 auth 标头。

以下是中级类的示例。

WebClient.swift

class WebClient: SessionManager 

static let sharedManager = WebClient()

func responseRequest(_ url: String, method: Alamofire.HTTPMethod, parameter: Parameters? = nil, encoding: ParameterEncoding, header: HTTPHeaders? = nil, completionHandler: @escaping (DefaultDataResponse) -> Void) -> Void 

    self.request(url, method: method, parameters: parameter, encoding: encoding, headers: header).response  response in
        completionHandler(response)
    

   

您可以根据需要修改上述类,也可以直接在请求方法中为每个 Web 服务调用传递标头。

【讨论】:

你继承的 SessionManager 是什么?【参考方案2】:

为 HTTP Basic Auth 添加授权标头并检查状态代码相当容易:

Alamofire
  .request(...)
  .authenticate(user: "username", password: "password")
  .response  response in 
    if let status = response.response?.statusCode, status == 401 
         // got a 401 response
    
  

【讨论】:

以上是关于如何使用 Alamofire 为每个请求添加 auth 标头,如果响应为 401 则执行某些操作?的主要内容,如果未能解决你的问题,请参考以下文章

将带有完成处理程序的 Firebase IdToken 添加到每个 AlamoFire 请求

如何使用操作查询发出多个 Alamofire 请求

如何使用 Alamofire 为 http 请求编写单元测试?

如何在 Alamofire Swift 的 POST 请求中添加标头参数(-H、-u、-X、-d)

如何使用来自 Alamofire 发布请求的 SwiftyJSON 填充下拉列表?

多个网站的多个 Alamofire 请求的正确模型