我正在尝试在Realm Sync中启用Facebook身份验证,但在登录时始终出现错误。
我一直在使用这些指南:
我拥有Facebook API / SDK提供的访问令牌,使我能够登录/注册用户。
[当我使用Realm的库通过Facebook Access Token登录用户时,出现错误,指出'provider'参数无效,但是此参数由Realm自己的类定义。
我已成功通过电子邮件和密码对用户进行身份验证,是否需要在Facebook / Realm Sync上进行其他设置?似乎Facebook身份验证在Realm Sync中不起作用,并且上面的帮助文件几乎没有用。
验证码
func authenticateWithFacebook(facebookToken: String, completion: @escaping (RealmAuthenticationResult) -> ()) {
let credentials = SyncCredentials.facebook(token: facebookToken)
print("------FACEBOOK LOGIN-------")
print("Token: \(facebookToken)")
login(credentials) { (result, userId) in
completion(result)
}
}
private func login(_ credentials: SyncCredentials, completion: @escaping (RealmAuthenticationResult, String?) -> ()) {
SyncUser.logIn(with: credentials, server: RealmConnection.AUTH_URL, onCompletion: { (user, err) in
if let _ = user {
print("User has logged in/signed up")
return completion(RealmAuthenticationResult.success(true), user?.identity)
} else if let error = err {
print(error.localizedDescription)
return completion(RealmAuthenticationResult.failure(error), user?.identity)
}
})
}
错误
Error Domain = io.realm.sync.auth代码= 601“您的请求参数做了不验证。 provider:无效的参数'provider'!;“UserInfo = {NSLocalizedDescription =您的请求参数没有验证。 provider:无效的参数'provider'!;}
我尝试过的其他事情
我尝试直接实例化基本提供程序类'RLMIdentityProvider'并使用该实例创建SyncCredentials,但没有骰子。
一种解决方法是从Facebook API / SDK获取帐户信息,并使用该帐户的电子邮件通过用户名/密码设置登录/注册。但是,这似乎使Facebook身份验证变得多余。
该领域文档链接已过时。进行了很多更改,请参见3.16.0文档(或更高版本)。
目前,密码,JWT和Firebase是唯一的身份验证选项,而Firebase身份验证是一个非常可靠的解决方案。 《使用同步领域->身份验证》部分的《领域文档》中还介绍了集成Firebase。我不会链接它,因为现在文档经常被更新。
如Realm团队所述(多次),由于其他公司(例如Firebase)处理得很好,因此广泛的身份验证选项不是优先事项。
[Realm论坛上有很多帖子对此发表了看法,但是Ian对this question的回应非常简洁。
我们已经并将继续优先考虑以下方面的同步功能:手机
然后
这就是为什么我们建议生产应用应将用户外包对专门从事这些业务的公司进行管理和认证功能。