是否有一个相对简单的教程和/或示例应用程序,它显示了使用Java App Engine(标准)应用程序执行Firebase身份验证所需的所有步骤?我觉得我已经完成了大部分要求,但我看到以下错误:
java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist.
我跑的时候:
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
我的目标是:
FirebaseToken decodedToken = firebaseAuth.verifyIdTokenAsync(idTokenString).get();
String userId = decodedToken.getUid();
UserRecord userRecord = firebaseAuth.getUserAsync(userId).get();
请注意,Firebase Auth是我将在此应用程序中访问的唯一Firebase API或服务,因此我认为我不需要创建Firebase服务帐户并设置应用程序默认凭据。是这样的吗?
实验表明我做需要创建Firebase服务帐户并使用服务帐户json凭证文件。如果有某种方法可以避免这样做,我很乐意看到它。
提前致谢。
-Mark
答案 0 :(得分:0)
我也有类似的情况。经过几个小时的挣扎和一些阅读文档,我发现了这个:https://firebase.google.com/docs/admin/setup
这些文档引用了它:https://firebase.google.com/docs/auth/admin/verify-id-tokens
最后(就像你想的那样)我需要创建一个Firebase服务帐户。这使我可以关注https://firebase.google.com/docs/admin/setup并在我的Java应用程序中初始化我的Firebase应用程序,并且我不再收到错误“FirebaseApp的名称[默认]不存在。”。我现在可以验证ID令牌并通过'verifyIdTokenAsync'从Firebase获取uid。
关于不需要服务帐户的最后一个问题,如果你在google的java应用引擎上运行,我相信你不需要服务帐户。
下面是来自同一设置页面的代码片段,暗示您所要求的内容确实可以完成。我没有在谷歌的Java应用程序引擎上运行所以我无法确认。我希望这会有所帮助。
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
答案 1 :(得分:0)
我还遇到了一个问题,即以某种方式无法在类路径中获取凭据json文件。因此,我使用了Levi's解决方案,更多细节如下:
创建课程:
public class FirebaseCredentialsHelper {
public String type= "";
public String project_id= "";
public String private_key_id= "";
public String private_key= "";
public String client_email= "";
public String client_id= "";
public String auth_uri= "";
public String token_uri= "";
public String auth_provider_x509_cert_url= "";
public String client_x509_cert_url= "";
}
使用依赖项:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
这就是您进行握手的方式。
Gson gson = new Gson();
InputStream stream = new ByteArrayInputStream(gson.toJson(new FirebaseCredentialsHelper()).getBytes(StandardCharsets.UTF_8));
GoogleCredentials credentials = GoogleCredentials.fromStream(stream);
FirebaseOptions options = new FirebaseOptions.Builder().setCredentials(credentials).build();