【问题标题】:Authentication in gitHub, request not executed在 gitHub 中进行身份验证,请求未执行
【发布时间】:2020-01-16 17:22:13
【问题描述】:

程序运行正常,去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站点进行数据解析,当我允许时,它返回程序,但没有执行访问令牌请求

【问题讨论】:

  • 您好,欢迎来到 Stack Overflow! OAuth 过程要求应用程序处理重定向 URL。我可以看到您的应用程序将重定向 URL 传递给 OAuth 进程,所以我的问题是:您是否在 App Delegate 中管理令牌的接收?检查 UIApplicationDelegate 的 application(_:open:options:) 方法并打印 URL 以查看您在该方法的实现中有效地接收了 Token。
  • @MikeTaverne 感谢您的回复,问题确实出在您写的地方,但是我仍然没有得到访问令牌,请求返回获取访问令牌的代码不正确,在 GitHub 上它说:如果您传递的验证码不正确、过期或与您在第一次授权请求中收到的不匹配,您将收到此错误。但是我不明白为什么代码不正确

标签: ios swift authentication alamofire


【解决方案1】:

问题是我没有在参数中指定redirect_uris

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2015-09-23
    • 2020-08-16
    • 2013-11-22
    • 1970-01-01
    • 2014-12-20
    • 2010-11-11
    相关资源
    最近更新 更多