麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > iOS > 正文

iOS Moya實現OAuth請求的方法

2019-10-21 18:22:01
字體:
來源:轉載
供稿:網友

0. 起源

開放授權(OAuth)是一個開放標準,允許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用。

而作為第三方軟件,為用戶提供 OAuth 登錄是更好的選擇,可以有效打消用戶對于個人賬戶密碼泄露的顧慮,同時也能有效避免用戶反復登錄,進而增加用戶的舒適度,提高用戶粘性。

1. 環境

項目使用 MVVM 架構,引入了 Rx 全家桶,網絡請求框架使用了 Moya ,以及處理 Oauth 相關的庫 OAuth2 

2. OAuth2 部分

參閱 OAuth2 庫的 README ,完成 OAuth 的信息配置:

let oauth2 = OAuth2CodeGrant(settings: [  "client_id": "my_swift_app",  "client_secret": "C7447242",  "authorize_uri": "https://github.com/login/oauth/authorize",  "token_uri": "https://github.com/login/oauth/access_token",  "redirect_uris": ["myapp://oauth/callback"],  "scope": "user repo:status",  "secret_in_body": true,  "keychain": false,] as OAuth2JSON)

同時因為 Moya 的底層網絡請求實現是基于 Alamofire,因此我們可以參照 OAuth2 提供的說明文檔 Alamofire 4 · p2/OAuth2 Wiki · GitHub 完成相關配置,關鍵代碼如下:

import Foundationimport OAuth2import Alamofireclass OAuth2RetryHandler: RequestRetrier, RequestAdapter {    let loader: OAuth2DataLoader    init(oauth2: OAuth2) {    loader = OAuth2DataLoader(oauth2: oauth2)  }    /// Intercept 401 and do an OAuth2 authorization.  public func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) {    if let response = request.task?.response as? HTTPURLResponse, 401 == response.statusCode, let req = request.request {      var dataRequest = OAuth2DataRequest(request: req, callback: { _ in })      dataRequest.context = completion      loader.enqueue(request: dataRequest)      loader.attemptToAuthorize() { authParams, error in        self.loader.dequeueAndApply() { req in          if let comp = req.context as? RequestRetryCompletion {            comp(nil != authParams, 0.0)          }        }      }    }    else {      completion(false, 0.0)  // not a 401, not our problem    }  }    /// Sign the request with the access token.  public func adapt(_ urlRequest: URLRequest) throws -> URLRequest {    guard nil != loader.oauth2.accessToken else {      return urlRequest    }    return try urlRequest.signed(with: loader.oauth2)  // "try" added in 3.0.2  }}

3. Moya 部分

Moya 的 provider 在初始化時可以傳入 SessionManager ,因此參照文檔,可以先使用 OAuth2 生成一個特定的 SessionManager :

func getManager() -> SessionManager {    let oauth2 = OAuth2CodeGrant(settings: [      "client_id": "my_swift_app",      "client_secret": "C7447242",      "authorize_uri": "https://github.com/login/oauth/authorize",      "token_uri": "https://github.com/login/oauth/access_token",      "redirect_uris": ["myapp://oauth/callback"],      "scope": "user repo:status",      "secret_in_body": true,      "keychain": false,      ] as OAuth2JSON)    let sessionManager = SessionManager()    let oauthHandler = OAuth2Handler(oauth2: oauth2)    sessionManager.adapter = oauthHandler    sessionManager.retrier = oauthHandler    return sessionManager  }

進而生成帶 OAuth 的 provider:

fileprivate lazy var provider: MoyaProvider = {  return MoyaProvider<API>(manager: self.getManager(),              plugins: [NetworkLoggerPlugin()])}()

使用

使用生成的 provider 發送請求即可,此時 Moya 可自動處理 OAuth 認證信息。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: av电影网站在线 | 国产日本欧美在线观看 | av黄色片网站| 久色成人| 欧美日日操 | 黄色网址免费进入 | 在线观看视频亚洲 | 欧美a级一区二区 | 欧美中文日韩 | 国产99久久久国产精品 | 亚洲视屏在线 | 91精品国产日韩91久久久久久360 | 龙床上的呻吟高h | 成人福利网 | 午夜精品福利视频 | 成人激情视频网站 | 国产一级在线看 | 国产资源在线观看视频 | 国产在线中文 | 国产午夜精品一区二区三区不卡 | fc2成人免费人成在线观看播放 | 曰韩一级片 | 亚洲精品成人在线视频 | 久久久久二区 | 色就操| 久久最新视频 | 成人三级视频在线观看 | 日韩精品99久久久久久 | japanese javhd| 91九色蝌蚪在线 | 99国产精品国产免费观看 | 黄色网址进入 | 91成人影库 | 天堂在线中文资源 | 久久亚洲成人 | 久久国产精品二国产精品 | 日本免费一区二区三区四区 | videos真实高潮xxxx | 加勒比综合 | 成人一级在线 | 日日操夜夜透 |