Я пытаюсь проверить ID токена пользователя. Всякий раз, когда я называю verifyIdToken функция является брошена следующая ошибка:Firebase Java admin SDK error
java.lang.IllegalArgumentException: ProjectID должен быть установлен
Вот код сервлета:
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));
}
}
Я проходил документацию, и я не нашел способ установить идентификатор проекта напрямую. Однако я думаю, что это не обязательно, в первую очередь, поскольку оно уже написано в URL-адресе service_key и database.
Спасибо!
Edit:
функция
Regular Java SDK (не админ) имеет setApplicationId ("PROJECT_ID"), построенный в FirebaseOptions строитель. Однако нет такой опции в Admin SDK
I 'мы использовали новейший Admin SDK 4.1.1, в котором метод setServiceAccont устарел. Я попытался перейти к вашей версии, после чего я получаю исключение NullPointerException. Оказалось, что InputStream имеет значение null, а новая версия SDK не проверяет нулевое значение и бросает ошибочную ошибку «projectId должна быть установлена». Большое спасибо, ваш комментарий привлек меня к сути вопроса –
Гах, извините! Мы получим это обновление в следующем выпуске, поэтому мы сделаем лучшую ошибку для этого случая. – jwngr
Нет проблем. благодаря –