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

Swift网络封装库Moya中文手册之Authentication的更多相关文章

  1. Swift网络封装库Moya中文手册之Endpoints

    Endpoints Endpoint是一种半私有的数据结构,Moya用来解释网络请求的根本构成.一个endpoint储存了以下数据: The URL. The HTTP method (GET,POS ...

  2. Swift网络封装库Moya中文手册之Plugins

    Plugins Moya plugins用于反映请求的发起或接收.Plugins定义为 PluginType 属性,可以在请求准备发起和接收到返回数据时回调. Built in plugins Moy ...

  3. Swift网络封装库Moya中文手册之Providers

    Providers 使用Moya,你可以通过一个 MoyaProvider 的实例发送所有网络请求,通过枚举来指定你要访问的具体API.在配置你的 Endpoint 之后,你差不多就做好了基础配置: ...

  4. Swift网络封装库Moya中文手册之RxSwift

    RxSwift Maya提供了一个可选的MoyaProvider 子类 - RxMoyaProvider.在网络请求完成时,我们不再使用 request() 函数的回调闭包,而是使用 Observab ...

  5. Swift网络封装库Moya中文手册之Targets

    Targets 使用Moya,我们首先需要定义一个target - 这通常是继承 TargetType 协议的 枚举 变量.接下来,你的app只需要处理这些targets,也就是一些你希望调用API完 ...

  6. EasyX库简单中文手册

    EasyX库简单中文手册 作者: 时间: 2021/2/2 第一个例程 #include <graphics.h> // 图像相关库 #include <conio.h> // ...

  7. Swift:网络库Alamofire

    一,Alamofire的说明与配置 1,什么是Alamofire (1)Alamofire 的前身是 AFNetworking.AFNetworking 是 iOS 和 OS X 上很受欢迎的第三方H ...

  8. swift中第三方网络请求库Alamofire的安装与使用

    swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面 ...

  9. Swift中文手册 -- The Basics

    原文:Swift中文手册 -- The Basics 基础部分 Swift 是 iOS 和 OS X 应用开发的一门新语言.然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 S ...

随机推荐

  1. 再谈树---无根树转有根树( dfs搜索转化+fa数组记录父节点) *【模板】

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include <vector> ...

  2. POJ 1845 Sumdiv(求因数和 + 逆元)题解

    题意:给你a,b,要求给出a^b的因子和取模9901的结果. 思路:求因子和的方法:任意A = p1^a1 * p2^a2 ....pn^an,则因子和为sum =(1 + p1 + p1^2 + . ...

  3. [SpringBoot] - 发送带附件的邮件

    <!--发送email依赖--> <dependency> <groupId>org.springframework.boot</groupId> &l ...

  4. IDEA快捷键复习使用

    https://www.jetbrains.com/help/idea/meet-intellij-idea.html 快捷键可以极快地进行代码编辑整理,在IDEA的快捷键中,除了有几个好像特别难按之 ...

  5. js循环遍历弹框,先弹出第一个之后逐步弹出第二个。。

    var data = [{ "login_advertTitle": "即使生活琐碎,也要活得优雅", "login_advertCont" ...

  6. HDU 2586 How far away ?(LCA在线算法实现)

    http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:给出一棵树,求出树上任意两点之间的距离. 思路: 这道题可以利用LCA来做,记录好每个点距离根结点的 ...

  7. Linux——文件搜索命令简单笔记

    一: 命令名称:which 命令所在路径:/usr/bin/which 执行权限:所有用户 功能描述:显示系统命令所在目录 范例:$ which ls 还有一个whereeis ls 命令 二: 命令 ...

  8. Window下的git配置文件在哪里【图文】

    来源:https://jingyan.baidu.com/article/870c6fc3589f22b03fe4be95.html 第一次使用码云建仓库总是提示各种错误,遂,从头在学一遍git,改篇 ...

  9. Codeforces 834D - The Bakery(dp+线段树)

    834D - The Bakery 思路:dp[i][j]表示到第j个数为止分成i段的最大总和值. dp[i][j]=max{dp[i-1][x]+c(x+1,j)(i-1≤x≤j-1)},c(x+1 ...

  10. angular5 ng-bootstrap和ngx-bootstrap区别

    https://angular.cn/resources ngx-bootstrap 安装: npm install ngx-bootstrap --save 再引入css <link href ...