zoukankan      html  css  js  c++  java
  • Swift网络封装库Moya中文手册之Authentication

    Authentication

    安全验证可能有点复杂,一些网络请求需要认证,这里我们讨论两种常见的。

    Basic HTTP Auth

    HTTP auth是HTTP协议自带的用户名/密码验证。如果你使用的是 HTTP auth,可以在初始化provider时提供一个CredentialsPlugin

    let provider = MoyaProvider<YourAPI>(plugins: [CredentialsPlugin { _ -> NSURLCredential? in
        return NSURLCredential(user: "user", password: "passwd", persistence: .None)
      }
    ])
    

    这个特殊的例子展示了当每次请求都使用HTTP验,这其实是不需要的,更好的处理是这样:

    let provider = MoyaProvider<YourAPI>(plugins: [CredentialsPlugin { target -> NSURLCredential? in
        switch target {
          case .TargetThatNeedsAuthentication:
            return NSURLCredential(user: "user", password: "passwd", persistence: .None)
          default:
            return nil
        }
      }
    ])
    

    OAuth

    OAuth很复杂。在不同的API可能需要多线程处理,你不会想要自己实现OAuth,所以这里有一些第三方库,例如 Heimdallr.swift。你只需要告诉Moya你使用的是什么。

    Moya包含了OAuth的思想,OAuth会在需要签名的时候给网络请求签名,所以给一个请求签名在Moya中是异步的。看一个示例:

    let requestClosure = { (endpoint: Endpoint<YourAPI>, done: NSURLRequest -> Void) in
        let request = endpoint.urlRequest // 这是Moya生成的request
        YourAwesomeOAuthProvider.signRequest(request, completion: { signedRequest in
          // OAuth provider可以用自己的网络接口来给request签名。
          // 但是,你必须调用 `done()`
          // Moya才会真的发出这个请求。
          done(signedRequest)
        })
    }
    let provider = MoyaProvider(requestClosure: requestClosure)
    

    (Swift会推断 YourAPI 的类型)

    在Provider子类中手动刷新session

    你可以看看这个在每次请求前手动刷新session的例子 Examples/SubclassingProvider
    是基于 Artsy's networking implementation 写的。

    转载请注明出处http://www.cnblogs.com/liuliuliu/p/5639502.html,并注明转载。

    原文链接
    翻译: bibibi_liuliu
    联系方式: 395985239@qq.com

  • 相关阅读:
    Codeforces Round #547 F1&F2. Same Sum Blocks(贪心)
    Codeforces Round #547 D. Colored Boots(贪心)
    Codeforces Round #547 C. Polycarp Restores Permutation(二分枚举/数学+模拟)
    CCF 201812-4 数据中心(最小生成树)
    CCF【小明放学&小明上学】
    TIME_WAIT状态
    ping的详细过程
    两段不相邻子段和之和最大
    神水一题之“Who's in the Middle”
    日进一步之“A Knight's Journey”
  • 原文地址:https://www.cnblogs.com/liuliuliu/p/5639502.html
Copyright © 2011-2022 走看看