AFNetworking 实现 OAuth 网络请求

关于OAuth 开放授权常用在获取身份认证和授权令牌token 获取等场景,关于OAuth更权威具体的知识介绍可参考网络资源了解。本文主要介绍了在Swift中使用AFNetworking 网络请求组件,进行OAuth请求。具体参考代码如下:

/// OAuth 网络请求
/// https://www.cnblogs.com/cui-cui/p/7107982.html
/// - Parameter strUrl: 请求s地址
/// - Parameter uname: 用户名
/// - Parameter pwd: 密码
/// - Parameter successBack: 成功回调
/// - Parameter failureBack: 失败回调
/// - Parameter isLoading: 是否显示加载动画
func oAuthRequestFor(Url strUrl:String,
                     andUsername uname:String,
                     andPassword pwd:String,
                     andSuccessBack successBack:@escaping(_ responseData:Any?)->(),
                     andFailureBack failureBack:@escaping(_ responseString:String?)->(),
                     withisLoading isLoading:Bool = true){
    
    print("请求地址:\(strUrl),参数:\(uname),\(pwd)")

    if !AppDelegate.app().isNetWork() {
        return
    }

    let _view:UIView? = UIApplication.shared.keyWindow?.rootViewController?.view
    if isLoading == true {
        DispatchQueue.main.async {
            if _view != nil {
                MBProgressHUD.showMessage("", to: _view)
            }
            else {
                MBProgressHUD.showMessage("")
            }
        }
    }

    let sessionManager = AFHTTPSessionManager.init()
    
    sessionManager.requestSerializer.setAuthorizationHeaderFieldWithUsername(uname, password: pwd)
    
    sessionManager.post(strUrl,
                        parameters: ["grant_type":"client_credentials"],
                        progress: nil,
                        success: { (sessionDataTask:URLSessionDataTask?, responseData:Any?) in

        DispatchQueue.main.async {
            if _view != nil {
                MBProgressHUD.hide(for: _view)
            }
            else {
                MBProgressHUD.hide()
            }
        }

        if let jsonObj:[String:Any] = responseData as? [String:Any] {
            //请求成功
            if K_API_IS_OK(rs: jsonObj[K_API_RESULT_CODE]) {
                successBack(jsonObj[K_API_RESULT_DATA])
            }
            else{
                successBack(jsonObj)
            }
        }
        else{
            failureBack("请求数据不存在")
        }
    }) { (sessionDataTask:URLSessionDataTask?, error:Error) in
        
        print(error.localizedDescription)
        failureBack(error.localizedDescription)

        DispatchQueue.main.async {
            if _view != nil {
                MBProgressHUD.hide(for: _view)
            }
            else {
                MBProgressHUD.hide()
            }
        }
    }?.resume()
}

示例中的userid,userpassword 是来自公司OAuth服务中申请账号而来。

以上信息就是这些,祝大家工作顺利,身体健康 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追夢秋陽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值