OAuth2: возврат в приложение после входа в систему - PullRequest
1 голос
/ 11 апреля 2019

Я использую 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
}

Но приложение никогда не вызывает вышеуказанное.

1 Ответ

0 голосов
/ 11 апреля 2019

Сегодня я узнал что-то новое.

  1. На веб-сайте разработчика GitHub я установил URL обратного вызова как myapp: // oauth / callback. (См. Ниже.)

enter image description here

  1. Я создал набор схем URL через Info.plist. Идентификатор сделан с моим обратным доменом + уникальное имя. Элемент схемы URL - это myapp. (См. Ниже.)

enter image description here

  1. Наконец, я добавил следующую строку кода к AppDelegate.

    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
        if url.scheme == "myapp" && url.host == "oauth" {
            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
    }
    

Если я вхожу в систему, мне предлагается следующее.

enter image description here

Когда я нажимаю Открыть, меня перенаправляют на мой контроллер просмотра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...