Программа работает нормально, переходит на сайт 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 для разрешения данных, когда я разрешаю, он возвращается в программу, но запрос токена доступа не выполняется