zoukankan      html  css  js  c++  java
  • iOS集成丁香园DXY OAuth 登陆 swift代码示例

    问:iOS集成OAuth登陆分几步?

    答:和把大象放冰箱里一样。

    第一步:打开webview,跳转到登陆页面:

            let url = "https://auth.dxy.cn/conn/oauth2/authorize?clientId=xxx&state=xxx&responseType=code&redirectUri=xxx”
            webView.loadRequest(NSURLRequest(URL: NSURL(string:url)!))

    第二步:在AppDelegate中,使用

    func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {}方法获取返回的code, 再通过code获取accessToken:

            let requestUrl = NSURL(string: "https://auth.dxy.cn/conn/oauth2/accessToken")
            let postData =  "clientId=xxx&clientSecret=xxx&grantType=authorizationCode&redirectUri=xxx&code=(code)"
             let request = NSMutableURLRequest(URL: requestUrl!)
            request.HTTPMethod = "POST"
            request.HTTPBody = postData.dataUsingEncoding(NSUTF8StringEncoding)

    第三步:通过accessToken获取用户信息,再捎带把webview关了:

    let getUserInfoRequestUrl = NSURL(string: "https://auth.dxy.cn/conn/oauth2/profile")
    let getUserInfoPostData = "accessToken=(access_token)"
                                
    let getUserInfoRequest = NSMutableURLRequest(URL: getUserInfoRequestUrl!)
    getUserInfoRequest.HTTPMethod = "POST"
    getUserInfoRequest.HTTPBody = getUserInfoPostData.dataUsingEncoding(NSUTF8StringEncoding)
                            
    let getUserInfoDataTask = session.dataTaskWithRequest(getUserInfoRequest,
                completionHandler: {(data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
                      if error != nil {
                          print(error?.code)
                          print(error?.description)
                      }
                      else    {
                         let str = NSString(data: data!, encoding: NSUTF8StringEncoding)
                         do{
                            let userInfoResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())
                            let id = userInfoResult["id"] as? String
    
                            let viewController = self.window?.rootViewController as! ViewController
                            viewController.id = id
                            viewController.closeWebView()
                         }
                         catch {}
                     }
           })
                                
    getUserInfoDataTask.resume()

    Ok, That's it. 是不是很简单?!

  • 相关阅读:
    数论分块与整除相
    P3254——DP&&入门
    P3384——树链剖分&&模板
    树链剖分模板
    P4145——线段树点修改&&模板题
    P1198最大数——线段树点修改&&模板题
    线段树(四)——两个标记(add和set)
    epoll 知识总结
    C++中的mutable关键字
    [LeetCode] Max Points on a Line
  • 原文地址:https://www.cnblogs.com/zhongzf/p/5064936.html
Copyright © 2011-2022 走看看