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

posted on 2016-07-04 09:31  bibibi_liuliu  阅读(944)  评论(0编辑  收藏  举报