Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Auth0获取未经身份验证的元数据_Ios_Swift_Auth0_Auth0 Lock - Fatal编程技术网

Ios Auth0获取未经身份验证的元数据

Ios Auth0获取未经身份验证的元数据,ios,swift,auth0,auth0-lock,Ios,Swift,Auth0,Auth0 Lock,我正在使用Auth0使用ios应用程序对我的用户进行身份验证,我一直在按照文档获取用户元数据,但在我尝试时它不起作用。在这些文档之后,这是我编写的方法: AuthenticationViewController 会话管理器 这就是我得到的错误: ---GETMETADATA---失败,出现未知错误[“错误”:错误请求,“状态码”:400,“消息”:错误HTTP身份验证头格式,“错误码”:承载] 我知道通常您会使用Bear+accessToken进行身份验证,但我看不到他们在文档或示例项目中使用此

我正在使用Auth0使用ios应用程序对我的用户进行身份验证,我一直在按照文档获取用户元数据,但在我尝试时它不起作用。在这些文档之后,这是我编写的方法:

AuthenticationViewController 会话管理器 这就是我得到的错误:

---GETMETADATA---失败,出现未知错误[“错误”:错误请求,“状态码”:400,“消息”:错误HTTP身份验证头格式,“错误码”:承载]


我知道通常您会使用Bear+accessToken进行身份验证,但我看不到他们在文档或示例项目中使用此功能

我发现了问题所在。在我的例子中,我需要使用
/api/v2
端点,而不是
/userInfo
端点:
.publications(“https://“+clientInfo.domain+”/api/v2/”
我希望这有助于未来的搜索者

    @IBAction func showLogin(_ sender: UIButton) {
        guard let clientInfo = plistValues(bundle: Bundle.main) else { return }
        Auth0
            .webAuth()
            .scope("openid profile read:current_user")
            .audience("https://" + clientInfo.domain + "/userinfo")
            .start {
                switch $0 {
                case .failure(let error):
                    Loaf("Something went wrong, please try again!", state: .error, location: .bottom, presentingDirection: .vertical, dismissingDirection: .vertical, sender: self).show()
                    print("---WEBAUTH---", error)
                case .success(let credentials):
                    if(!SessionManager.shared.store(credentials: credentials)) {
                        print("Failed to store credentials")
                    } else {
                        SessionManager.shared.retrieveProfile { error in
                            if let error = error {
                                print("---RETRIEVE PROFILE---", error)
                            } else {
                                SessionManager.shared.getMetaData { (error) in
                                    if let error = error {
                                        print("---GETMETADATA---", error)
                                    } else {
                                        DispatchQueue.main.async {
                                            self.performSegue(withIdentifier: "authenticate", sender: self)
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
        }
    }
class SessionManager {
    static let shared = SessionManager()
    private let authentication = Auth0.authentication()
    let credentialsManager: CredentialsManager!
    var profile: UserInfo?
    var credentials: Credentials?
    var patchMode: Bool = false

    private init () {
        self.credentialsManager = CredentialsManager(authentication: Auth0.authentication())
        _ = self.authentication.logging(enabled: true)
    }

    func retrieveProfile(_ callback: @escaping (Error?) -> ()) {
        guard let accessToken = self.credentials?.accessToken
            else { return callback(CredentialsManagerError.noCredentials) }
        self.authentication
            .userInfo(withAccessToken: accessToken)
            .start { result in
                switch(result) {
                case .success(let profile):
                    self.profile = profile
                    callback(nil)
                case .failure(let error):
                    callback(error)
                }
        }
    }

    func getMetaData(_ callback: @escaping (Error?) -> ()) {
        guard let accessToken = self.credentials?.accessToken
            else { return callback(CredentialsManagerError.noCredentials) }
        Auth0
            .users(token: accessToken)
            .get(profile!.sub, fields: ["user_metadata"], include: true)
            .start { (result) in
                switch result {
                case .success(let user):
                    print(user)
                    callback(nil)
                case .failure(let error):
                    callback(error)
                }
        }
    }

    func store(credentials: Credentials) -> Bool {
        self.credentials = credentials
        // Store credentials in KeyChain
        return self.credentialsManager.store(credentials: credentials)
    }
}
// also contains standard plist func written by Auth0