Я работал над интеграцией Auth0 с моим приложением.Когда я нажимаю «Вход», auth0 перенаправляет меня на предоставленный URL-адрес входа.После успешного входа я вернусь к другому ViewController.В этом контроллере просмотра у меня есть кнопка выхода, которая перенаправляет меня на страницу входа.Теперь, когда я снова нажимаю на кнопку входа, он не запрашивает учетные данные для входа в систему и переносит меня в ViewController, потому что auth0 хранит данные кэша пользователя, вошедшего в систему. Но когда я нажимаю кнопку выхода, я хочу auth0удалить данные кэша, потому что я хочу, чтобы пользователь перенаправлял на страницу входа, где пользователь должен вводить учетные данные каждый раз, когда он входит в систему. Возможно ли это?
func signIn() {
print("Sign In")
guard let clientInfo = plistValues(bundle: Bundle.main) else { return }
Auth0
.webAuth()
.scope("openid profile")
.audience("https://" + clientInfo.domain + "/userinfo")
.start {
switch $0 {
case .failure(let error):
print("Error: \(error)")
case .success(let credentials):
if let accessToken = credentials.accessToken, let refreshToken = credentials.refreshToken, let idToken = credentials.idToken {
UserDefaults.standard.setValue(accessToken, forKeyPath: "accessToken")
UserDefaults.standard.setValue(refreshToken, forKeyPath: "refreshToken")
UserDefaults.standard.setValue(idToken, forKeyPath: "idToken")
let loadingAlert = UIAlertController.customAlert(title: "Success", message: accessToken)
loadingAlert.presentInViewController(self)
}
if (!SessionController.shared.store(credentials: credentials)) {
print("Failed to store credentials")
}
else {
SessionController.shared.retrieveProfile { error in
DispatchQueue.main.async {
guard error == nil else {
print("Failed to retrieve profile: \(String(describing: error))")
return self.signIn()
}
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyBoard.instantiateViewController(withIdentifier: "profileViewController") as! ProfileViewController
self.present(vc, animated: true, completion: nil)
}
}
}
}
}
}
@IBAction func btnActionSignOut(_ sender: UIButton) {
let alertController = UIAlertController(title: AppSettings.shared.appName, message: "Are you sure you want to logout?", preferredStyle: .alert)
let okAction = UIAlertAction(title: "Yes", style: .default) { (action:UIAlertAction) in
// Clear access tokens and logout user.
UserDefaults.standard.setValue(nil, forKeyPath: "accessToken")
UserDefaults.standard.setValue(nil, forKeyPath: "refreshToken")
UserDefaults.standard.setValue(nil, forKeyPath: "idToken")
_ = SessionController.shared.logout()
self.dismiss(animated: true, completion: nil)
}
let noAction = UIAlertAction(title: "No", style: .default) { (action:UIAlertAction) in
// Do nothing. Alert dismissed.
}
alertController.addAction(okAction)
alertController.addAction(noAction)
self.present(alertController, animated: true, completion: nil)
}
Iожидаю, что менеджер сеансов очистит сохраненные данные и покажет мне экран входа в систему, но вместо этого мне будет позволено войти в систему без каких-либо учетных данных.