Аутентификация в gitHub, запрос не выполнен - PullRequest
0 голосов
/ 16 января 2020

Программа работает нормально, переходит на сайт GitHub для разрешения данных, когда я разрешаю, она возвращается в программу, но запрос маркера доступа не выполняется

import UIKit
import SafariServices
import Alamofire

let kSafariViewControllerCloseNotification = "kSafariViewControllerCloseNotification"
class AuthenticationViewController: UIViewController, SFSafariViewControllerDelegate {    


    var safariVC: SFSafariViewController?
    @IBOutlet weak var loginButton: UIButton!

        // data from your Github app
    let client_id = "********"
    let client_secret = "***************"
    let scope = "repo"
    let redirect_uris = ["clientforgithub://oauth/callback"]
    let token_uri = "https://github.com/login/oauth/access_token"

    override func viewDidLoad() {
        super.viewDidLoad()

            // add observer to vc
        NotificationCenter.default.addObserver(self, selector: #selector(safariLogin(notification:)), name: NSNotification.Name(rawValue: kSafariViewControllerCloseNotification), object: nil)
    }

    @IBAction func loginButtonTapped(_ sender: Any) {


         // you can set the scope and client id
    if let stringUrl = "https://github.com/login/oauth/authorize?scope=\(scope)&client_id=\(client_id)".addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed), let url = URL(string: stringUrl) {
        safariVC = SFSafariViewController(url: url)
        safariVC!.delegate = self
        self.present(safariVC!, animated: true, completion: nil)
    }
}
    @objc func safariLogin(notification: NSNotification) {

        // returned url from Github
        let url = notification.object as! NSURL

        // returned code
        let code = self.getParameterFrom(url: String(describing: url), param: "code")

        // parameters for access token request
        let parameters = ["client_id": client_id, "client_secret": client_secret, "code": code, "accept": "application/json"] as [String : Any]
//*******************this request is not being executed*******************
        // get access token from Github with the code
        request(token_uri, method: .post, parameters: parameters).responseString { response in

        if let result = response.result.value, let makeItUrl = NSURL(string: "https://api.github.com/?\(result)") {


            if let access_code = self.getParameterFrom(url: String(describing: makeItUrl), param: "access_token") {
                // # here is the access token # //
                print(access_code)
                let defaults = UserDefaults.standard
                defaults.set("\(access_code)", forKey: "MyKey")
                defaults.synchronize()
            }
        }
  }

        // dismiss the Safari View Controller
        self.safariVC!.dismiss(animated: true, completion: nil)
        self.performSegue(withIdentifier: "HomeSegue1", sender: self)

    }


    // parse the parameters from the url string
    func getParameterFrom(url: String, param: String) -> String? {

        guard let url = URLComponents(string: url) else { return nil }
        return url.queryItems?.first(where: { $0.name == param })?.value
    }

    func safariViewControllerDidFinish(_ controller: SFSafariViewController) {

        // dismiss the SafariViewController
        controller.dismiss(animated: true)

    }


}

Программа работает нормально, заходит на сайт GitHub для разрешения данных, когда я разрешаю, он возвращается в программу, но запрос токена доступа не выполняется

...