如何使用Auth0注销用户

时间:2019-07-10 07:30:10

标签: ios swift auth0

我一直在努力将Auth0与我的应用程序集成在一起。当我单击登录时,auth0将我重定向到提供的登录URL。成功登录后,我将返回另一个ViewController。在该视图控制器中,我有一个退出按钮,可将我重定向到登录页面。现在,当我再次单击登录时,它不会要求凭据登录,而是带我到ViewController,因为auth0存储了登录用户的缓存数据。但是,当我单击注销按钮时,我希望auth0删除缓存数据,因为我希望用户重定向到登录页面,用户每次登录时都应在该页面上输入凭据。是否可以?

FormModule
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)
                            }
                        }
                    }
                }
        }
    }

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

1 个答案:

答案 0 :(得分:0)

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

如果您要通过重新验证身份进行真正注销,则还需要将用户重定向到注销,以确保清除Auth0用户会话和可选的身份提供者会话(使用federated查询参数选项)。用户。

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