Я использую Auth0 для аутентификации пользователей в приложении. Логин auth0
определен в BaseViewController
. После проверки подлинности мне нужно обновить информацию в LoginViewController
с подробностями, полученными из проверки подлинности.
Итак, у меня есть:
import UIKit
import SwiftValidator
import Lock
import Auth0
protocol BaseViewControllerDelegate: class {
func getName()
}
class BaseViewController {
weak var delegate: BaseViewControllertDelegate?
var validator = Validator()
override func viewWillAppear(_ animated: Bool) {
loadAuth0LoginPage()
}
func loadAuth0LoginPage() {
Lock
.classic()
.withOptions {
$0.oidcConformant = true
$0.scope = "openid profile"
}
.withStyle {
$0.logo = LazyImage(name: "*****")
$0.primaryColor = UIColor(red: 0.93, green: 0.573, blue: 0, alpha: 1.0)
$0.headerColor = UIColor.i6.darkGrey
}
.onAuth { credentials in
self.getUserProfile(credentials: credentials)
}
.present(from: self)
}
func getUserProfile(credentials: Credentials) {
guard let accessToken = credentials.accessToken else { return }
Auth0
.authentication()
.userInfo(withAccessToken: accessToken)
.start { result in
switch result {
case .success(let profile):
self.delegate?.getName()
case .failure(let error):
print("Error")
}
}
}
}
А затем на LoginViewController:
import UIKit
import SwiftValidator
import Lock
class LoginViewController: BaseViewController, BaseViewControllerDelegate {
func getName() {
print("get name")
}
var baseVC: BaseViewController
init() {
self.baseVC = BaseViewController()
super.init(nibName: nil, bundle: nil)
baseVC.delegate = self
}
Итак, я устанавливаю протокол на BaseViewController
и создаю свойство делегата. Затем я вызываю метод, как только oAuth
сделал свое дело. В LoginViewController
я принимаю протокол и определяю необходимый метод. Я полагаю, что, где я иду не так, я создаю экземпляр BaseViewController
, а затем назначаю делегата себе, но я немного застрял в том, где эта часть должна go. Любая помощь будет принята с благодарностью.