0
我試圖驗證用戶的ID令牌。每當我叫verifyIdToken功能以下錯誤被拋出:Firebase Java管理員SDK錯誤
java.lang.IllegalArgumentException異常:專案編號必須設置
下面是servlet代碼:
public class GeneratorInfoServlet extends HttpServlet {
FirebaseApp app = null;
@Override
public void init(ServletConfig config) {
InputStream serviceAccount = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("/WEB-INF/service_key.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
.setDatabaseUrl("https://project-id.firebaseio.com/")
.build();
this.app = FirebaseApp.initializeApp(options);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
StringBuffer tokenBuffer = new StringBuffer();
String line;
try {
BufferedReader reader = req.getReader();
while ((line = reader.readLine()) != null)
tokenBuffer.append(line);
this.verifyToken(tokenBuffer.toString());
out.print("{'success': false}");
} catch (Exception e) {
System.err.print(e);
out.print("{'success': true}");
}
}
private void verifyToken(String idToken) {
System.out.println(app);
FirebaseAuth.getInstance(this.app).verifyIdToken(idToken)
.addOnSuccessListener(decodedToken -> {
String uid = decodedToken.getUid();
System.out.println(uid);
}).addOnFailureListener(e -> System.out.println(e));
}
}
我已經一直在通過文檔,我沒有找到如何直接設置項目ID的方法。不過,我認爲它首先不應該是必需的,因爲它已經寫入了service_key和數據庫url。
謝謝!
編輯:
內置FirebaseOptions建設者常規的Java SDK(非管理員)已setApplicationId( 「PROJECT_ID」)功能。但是,有在管理SDK沒有這樣的選擇
我我一直在使用最新的Admin SDK 4.1.1,其中不推薦使用setServiceAccont方法。我試圖降級到你的版本之後,我得到了NullPointerException。事實證明,InputStream爲空,並且較新的SDK版本沒有檢查空值,並拋出誤導性的「projectId must be set」錯誤。非常感謝,你的評論讓我對問題的核心 –
嘎,對不起!我們將在即將發佈的版本中更新這個版本,以便爲這種情況提供更好的錯誤。 – jwngr
沒問題。謝謝 –