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. 高斯日记|2013年蓝桥杯B组题解析第一题-fishers

    高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几 ...

  2. NS3 实验脚本的编写步骤

    第一步:配置主机,安装模块 (1)创建N个节点: NodeContainer nodes; nodes.Creat(N); 比如我目前接触到的PointToPoint,N就是2 (2)利用拓扑助手He ...

  3. ASP.NET MVC 中使用Ckeditor4.5 编辑器

    一.在项目中添加Ckeditor4.5.11 (1) 新建 ASP.NET MVC5项目,解压缩ckeditor_4.5.11_standard.zip,在VS2015的解决方案资源管理器中将得到的“ ...

  4. input file获取选择图片的本地路径和base64路径

    input file获取选择图片的本地路径和base64路径 本地路径: myHeadFile: function (e) { // 这里是input file 的onchange事件 ] const ...

  5. Java Selenium 笔记

    目录一.基本语句 1.循环控制(break,continue) 3.字符的替换(replace,repalceFirst,replaceAll,regex) 4.字符串的连接("+" ...

  6. MongoDB(课时22 过期索引)

    3.6.2 过期索引 在一些程序的站点会出现若干秒之后信息被删除的情况,例如:手机信息验证码,那么在MongoDB里面可以轻松实现过期索引.但这个时间往往不怎么准确. 范例:设置过期索引(实现过期索引 ...

  7. ubuntu配置zsh和oh-my-zsh

    1安装zsh sudo apt-get install -y zsh chsh -s /bin/zsh 2安装oh-my-zsh $ sh -c "$(curl -fsSL https:// ...

  8. 在每个节点填充向右的指针 Populating Next Right Pointers in Each Node

    2018-08-09 16:01:40 一.Populating Next Right Pointers in Each Node 问题描述: 问题求解: 由于是满二叉树,所以很好填充. public ...

  9. C#获取类库(DLL)的绝对路径

    C#中当我们在写公共的类库的时候难免会调用一些xml配置文件,而这个配置文件的路径则非常重要,常用的方式就是写在web.config中,而我们也可以将配置文件直接放在dll的同级目录,那么怎么获得当前 ...

  10. JSP生成验证码

    <%@ page language="java" import="java.util.*" pageEncoding="gbk"%&g ...