我正在尝试通过本机反应来使用Firebase的手机身份验证。我用两种方法创建了一个原生模块:
验证用户的电话号码。这向用户发送带有验证码的SMS。这部分工作正常。
RCT_EXPORT_METHOD(verifyPhoneNumber:(NSString *)phone callback:(RCTResponseSenderBlock)callback)
{
[[FIRPhoneAuthProvider provider] verifyPhoneNumber:phone
completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
if (error) {
callback(@[error, [NSNull null]]);
return;
}
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:verificationID forKey:@"authVerificationID"];
callback(@[[NSNull null], verificationID]);
}];
}
另一个接受该代码,并使用存储的verificationID
创建FIRAuthCredential
。这似乎也有效。如果我在Native层中记录凭证,我发现它正在创建并输出为:<FIRPhoneAuthCredential: 0x170453950>
RCT_EXPORT_METHOD(getCredential:(NSString *)code callback:(RCTResponseSenderBlock)callback)
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *verificationID = [defaults stringForKey:@"authVerificationID"];
FIRAuthCredential *credential = [[FIRPhoneAuthProvider provider]
credentialWithVerificationID:verificationID
verificationCode:code];
callback(@[[NSNull null], credential]);
}
我遇到的麻烦就是将该凭证传递回Javascript。我想得到一些可用于登录的内容。
MyNativeModule.getCredential("12345", (error, credential) => {
...
firebase.auth().signInWithCredential(credential)
});
但我总是得到credential
null
。我如何将该凭证转换为可以在回调中传递并在javascript中使用的内容?