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

  • 相关阅读:
    cf D. Vessels
    cf C. Hamburgers
    zoj 3758 Singles' Day
    zoj 3777 Problem Arrangement
    zoj 3778 Talented Chef
    hdu 5087 Revenge of LIS II
    zoj 3785 What day is that day?
    zoj 3787 Access System
    判断给定图是否存在合法拓扑排序
    树-堆结构练习——合并果子之哈夫曼树
  • 原文地址:https://www.cnblogs.com/liuliuliu/p/5639502.html
Copyright © 2011-2022 走看看