Я использую cocoapod с именем ( p2 / OAuth2 ) для входа в учетную запись с GitHub . Я просто играю, потому что хочу знать, как работает OAuth2.
Вот что у меня есть в контроллере вида (UIViewController
).
import UIKit
import p2_OAuth2
class ViewController: UIViewController {
// MARK: - Variables
let oauth2 = OAuth2CodeGrant(settings: [
"client_id": "xxxxxx",
"client_secret": "xxxxxxxx",
"authorize_uri": "https://github.com/login/oauth/authorize",
"token_uri": "https://github.com/login/oauth/access_token", // code grant only
"redirect_uris": ["myapp://oauth/callback"], // register your own "myapp" scheme in Info.plist
"scope": "user repo:status",
"secret_in_body": true, // Github needs this
"keychain": false, // if you DON'T want keychain integration
] as OAuth2JSON)
// MARK: - IBOutlet
// MARK: - IBAction
@IBAction func loginTapped(_ sender: UIBarButtonItem) {
oauth2.logger = OAuth2DebugLogger(.trace)
oauth2.authorize() { authParameters, error in
if let params = authParameters {
print("Authorized! Access token is \(self.oauth2.accessToken ?? "")")
print("Authorized! Additional parameters: \(params)")
}
else {
print("Authorization was cancelled or went wrong: \(String(describing: error))")
}
}
}
// MARK: - Life cycle
override func viewDidLoad() {
super.viewDidLoad()
}
}
Что я хотел бы знать, так это как вернуться к контроллеру представления после успешного входа в свою учетную запись с помощью GitHub. Пока что я буду перенаправлен на URL-адрес, который я зарегистрировал на сайте разработчиков GitHub. Я полагаю, мне нужно зарегистрировать схему URL обратного вызова под Info
. Все это совершенно новое. Так что я не уверен, как это сделать. Спасибо.
UPDATE
Я добавил набор URL types
через info.plist. Схема URL установлена на myapp. И вот что у меня есть в AppDelegate
.
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
if url.scheme == "myapp" && url.host == "oauth" {
//oauth2.handleRedirectURL(url)
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "HomeView") as! UINavigationController
let viewController = controller.topViewController as! ViewController
window?.rootViewController = viewController
}
window?.makeKeyAndVisible()
return true
}
Но приложение никогда не вызывает вышеуказанное.