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