gpt4 book ai didi

ios - 如何使用 Auth0 注销用户

转载 作者:行者123 更新时间:2023-11-28 13:33:48 26 4
gpt4 key购买 nike

我一直致力于将 Auth0 与我的应用程序集成。当我点击登录时,auth0 将我重定向到提供的登录 URL。成功登录后,我将返回另一个 ViewController。在该 View Controller 中,我有一个注销按钮,可将我重定向到登录页面。现在,当我再次单击登录时,它不会要求凭据登录并将我带到 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)
}

我希望 session 管理器清除存储的数据并显示登录屏幕,但我可以在没有任何凭据的情况下再次登录。

最佳答案

对于注销,您似乎正在清除设备中的 token ,但实际上并未将用户重定向到 Auth0 Logout端点 https://YOUR_DOMAIN/v2/logout

您需要重定向用户注销以确保 Auth0 用户 session 和可选的身份提供者 session (使用 federated 查询参数选项)被清除,如果您正在寻求真正的注销 re - 用户身份验证。

您再次登录的原因可能是因为 Seamless SSO ,Auth0 检测到用户在该浏览器上仍有有效 session ,因此他们无需凭据即可让用户登录。删除该浏览器上的 Auth0 cookie 的唯一方法是将它们重定向到上面的注销 API。

关于ios - 如何使用 Auth0 注销用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56965532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com