在旧版本的Firebase中,我们可以获取经过身份验证的令牌,以便在我们的应用扩展程序之间进行共享。
但升级到Firebase 3.0时,该功能不再起作用。 我使用了getTokenWithCompletion:在FIRUser上,然后在我的App扩展中,我调用signInWithCustomToken:completion:使用我刚获得的令牌。但是Firebase在回复中返回错误:
错误域= FIRAuthErrorDomain代码= 17000“自定义令牌格式为 不正确。请查看文档。“UserInfo = 0x799b6010 {error_name = ERROR_INVALID_CUSTOM_TOKEN,NSLocalizedDescription = The 自定义标记格式不正确。请查看文档。}
如何从FIRUser获取身份验证令牌以在我的App Extension中重新验证它?
答案 0 :(得分:4)
signInWithCustomToken
旨在与您自己的服务器上自己的令牌一起使用(阅读更多here)。
您在应用程序的不同组件之间引导会话的最佳方式是在登录时共享用户的凭据并在所有组件中执行引导。
例如,如果您使用Facebook login,则在检索Facebook访问令牌时,您必须将其从应用程序共享到您的扩展程序,然后在主应用程序中使用相同的令牌调用signInWithCredential和扩展。
目前无法使用其他Firebase应用实例中的v3.X SDK登录Firebase应用。
答案 1 :(得分:2)
今天早上在Android上升级到最新版本的Firebase时遇到了同样的问题。 要解决此问题,我必须将Firebase Server SDK更新到版本3.0 +
这是一个Java后端实现,但同样适用于NodeJS。
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-server-sdk</artifactId>
<version>[3.0.0,)</version>
</dependency>
在新的Firebase Server SDK中,您必须首先使用生成的JSON文件初始化Firebase应用程序。(在新的Firebase控制台中的权限下找到)然后您可以生成JWT令牌。
FirebaseOptions options = new FirebaseOptions.Builder()
.setServiceAccount(new FileInputStream("path/to/json/file.json"))
.setDatabaseUrl("https://myapp.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
String token = FirebaseAuth.getInstance().createCustomToken("userID");
以这种方式生成的令牌允许我使用新的signInWithCustomToken()方法。
您可以在此处阅读更多内容:https://firebase.google.com/docs/auth/server
希望这有帮助
答案 2 :(得分:2)
我和OP有同样的错误。我假设您在服务器上生成令牌期间使用服务帐户电子邮件和私钥。我的服务器生成的令牌在http://jsfiddle.net/firebase/XDXu5/上成功完成。但是,我的应用程序会给出相同的错误。
最后,事实证明我使用“HS256”进行签名(这是我在现有令牌生成中使用的 - pre firebase 3.0)。当我将其更改为“RS256”时,生成的令牌在应用程序中起作用。
希望有所帮助。