美文网首页
Creating an Authorization Plugin

Creating an Authorization Plugin

作者: 心印印心 | 来源:发表于2017-06-29 21:16 被阅读0次

    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. 如何自定义授权插件,及复杂的授权插件

    相关文章

      网友评论

          本文标题:Creating an Authorization Plugin

          本文链接:https://www.haomeiwen.com/subject/ztmvcxtx.html