【问题标题】:Header authorization best practice with Alamofire 4, with global 401 code catchingAlamofire 4 的标头授权最佳实践,具有全局 401 代码捕获
【发布时间】:2017-03-08 10:06:51
【问题描述】:

我正在使用 Alamofire 4.0 的应用中实施授权 我有一个令牌要添加到我发出的每个 HTTP 请求的标头中,如果响应代码是 401,我必须检查每个请求,在这种情况下,我必须注销用户。

最佳做法是什么?有没有一种简单的方法可以将此行为添加到每个请求中?

我查看了会话管理器和请求适配器 here,创建单例请求管理器并使用它来创建请求非常容易,但我找不到添加集中式请求管理器的好方法验证 401 响应代码。 这必须是一般验证,如果失败,我会注销用户,如果通过,我会让处理请求给提出请求的人。

我想要的目标是在我的代码中只有一个点用于检查 401 错误代码。

环顾四周,我没有找到满意的答案 有关如何执行此操作的任何建议?

【问题讨论】:

  • 您好,正在尝试解决同样的问题,您找到解决方法了吗?
  • 我按照以下答案的建议覆盖了会话管理器。然后我对 401 代码做了一个基本的验证。如果验证通过,那么我调用发出请求的人的完成处理程序
  • @allemattio 你能发布一些你的解决方案的代码吗?谢谢

标签: ios swift alamofire


【解决方案1】:

SessionManager 中的简单 GET 方法。为 Web 服务创建一个单独的类,并在每个请求中进行验证。

  let alamofireManager: SessionManager = {
    let configuration = URLSessionConfiguration.default
    configuration.httpMaximumConnectionsPerHost = AppConstants.maxSimultaneousDownloads
    configuration.requestCachePolicy = .reloadIgnoringLocalCacheData
    return SessionManager(configuration: configuration)
  }()


 self.alamofireManager.request(UrlString)
        .responseJSON { response in

          print("response: \(response)")

          guard response.result.isSuccess else {
          //Request fails here. Trigger here to log out the user
            return
          }

          if let JSON = response.result.value {
            print("Successful")
            //or check response code here

          }
      }

【讨论】:

  • 我认为这不能回答我的问题。我真正想要的是集中 401 错误处理,在所有其他情况下,我想要求提出请求的人处理成功或其他失败情况(422、500 等)。您建议在我提出的每个请求中处理 401,我想避免这种情况。编辑我的问题以更好地解释我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 2016-07-31
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 2021-09-26
相关资源
最近更新 更多