Creating an Authorization Plugin(创建一个授权插件)--Moya文档

Creating an Authorization Plugin(创建一个授权插件)

API请求通过JWT或者另外类型的访问令牌来授权是相当常见的。在这个例子中我们将创建一个插件用来把jwt添加到请求中。首先,让我们来看下这个例子,如何通过插件把jwt添加到一个请求中.

struct AuthPlugin: PluginType {
  let token: String

  func prepare(_ request: URLRequest, target: TargetType) -> URLRequest {
    var request = request
    request.addValue("Bearer " + token, forHTTPHeaderField: "Authorization")
    return request
  }
}

let provider = MoyaProvider<Target>(plugins: [AuthPlugin(token: "eyeAm.AJsoN.weBTOKen")])

现在我们来看下更加复杂的例子,当我们创建插件时我们可能还没有访问到jwt,或者不是所有的请求都需要签名(ps:即携带认证). 我们可以通过扩展TargetType协议来提供是否需要授权的信息并且使用闭包来提供一个令牌。这样完成这个功能。

class TokenSource {
  var token: String?
  init() { }
}

protocol AuthorizedTargetType: TargetType {
  var needsAuth: Bool { get }
}

struct AuthPlugin: PluginType {
  let tokenClosure: () -> String?

  func prepare(_ request: URLRequest, target: TargetType) -> URLRequest {
    guard
      let token = tokenClosure(),
      let target = target as? AuthorizedTargetType,
      target.needsAuth
    else {
      return request
    }

    var request = request
    request.addValue("Bearer " + token, forHTTPHeaderField: "Authorization")
    return request
  }
}

let source = TokenSource()
let provider = MoyaProvider<Target>(
  plugins: [
    AuthPlugin(tokenClosure: { return source.token })
  ]
)

source.token = "eyeAm.AJsoN.weBTOKen"

总结 这小节的核心:

  1. 如何自定义授权插件,及复杂的授权插件
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,199评论 19 139
  • 构建用户管理微服务翻译自:https://springuni.com 构建用户管理微服务(一):定义领域模型和 R...
    极乐君阅读 1,606评论 0 10
  • 转载本文需注明出处:微信公众号EAWorld,违者必究。 本文目录: 一、单体应用 VS 微服务 二、微服务常见安...
    72a1f772fe47阅读 8,590评论 3 25
  • 1. 微服务架构介绍 1.1 什么是微服务架构? 形像一点来说,微服务架构就像搭积木,每个微服务都是一个零件,并使...
    静修佛缘阅读 6,709评论 0 39
  • 一、安全 安全是方便的敌人,反之亦然。对于虚拟或真实的系统,从物理入口到网络银行平台,这一说法是真实的。工程师不断...
    y0ngb1n阅读 3,273评论 0 19