gpt4 book ai didi

java - Firebase:无法解析服务帐户:必须设置 'project_id'

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:12 26 4
gpt4 key购买 nike

我尝试使用 Firebase Admin SDK(java) 从服务器端实现验证 token ID,但收到错误:

无法解析服务帐户:必须设置“project_id”

我在 firebase 的以下路径中生成了我的凭据:

项目设置->服务帐户并生成新的私钥,我有这个:

    {
"type": "service_account",
"project_id": "apilogintest-9c5f5",
"private_key_id": "<privateKeyId...>",
"private_key": "-----BEGIN PRIVATE KEY-----\n<a really big private Key>\n-----END PRIVATE KEY-----\n",
"client_email": "<clientEmail>",
"client_id": "<clientId>",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-hhay...."
}

我加载 JSON 文件的方式也与 firebase 网页相同:

对于行家:

enter image description here

使用 java 加载我的 json 文件:

    FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
.setDatabaseUrl("https://apilogintest-9c5f5.firebaseio.com/")
.build();
FirebaseApp initializeApp = FirebaseApp.initializeApp(options);

以及我尝试验证 token ID 时的最后一部分:

FirebaseAuth.getInstance(initializeApp).verifyIdToken(token)
.addOnSuccessListener(new OnSuccessListener<FirebaseToken>() {
@Override
public void onSuccess(FirebaseToken decodedToken) {
String uid = decodedToken.getUid();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
e.printStackTrace();

}
});

我认为我做了与 firebase 网页提到的相同的操作,但我收到了上述错误

有人可以帮助我吗?

非常感谢您的帮助。

最佳答案

我发现了这个问题。

问题是当我尝试重新验证 JSON 对象,在控制台中打印 JSON 对象时,我不知道为什么,但在设置 firebase 选项之前我无法使用 Stream 执行任何过程(也不能使用 BufferedReader),我的意思是,以下代码不会运行,向我们显示错误:

Firebase:无法解析服务帐户:必须设置“project_id”

try {
String jsonData = streamToString(serviceAccount);
JSONObject jsonObject = new JSONObject(jsonData);
String projectId = jsonObject.getString("project_id");
System.out.println(projectId);
} catch (JSONException e) {
throw new RuntimeException(e);
}

FirebaseOptions options = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
.setDatabaseUrl("https://apilogintest-9c5f5.firebaseio.com").build();
initializeApp = FirebaseApp.initializeApp(options);

但是如果我按如下方式直接加载文件,之前没有任何 block 代码(没有 bufferedReader 或 jsonData = streamToString(serviceAccount);....):

   FirebaseOptions options = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(fl))
.setDatabaseUrl("https://apilogintest-9c5f5.firebaseio.com").build();
initializeApp = FirebaseApp.initializeApp(options);

我不知道为什么会出现这种行为,但现在正在发挥作用。

感谢您的支持!

关于java - Firebase:无法解析服务帐户:必须设置 'project_id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43148808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com