0
ユーザのIDトークンを確認しようとしています。Firebase Java admin SDKエラー
java.lang.IllegalArgumentExceptionが:私はverifyIdTokenは、次のエラーがスローされた関数を呼び出すたび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));
}
}
私はしましたドキュメントを通っていたので、プロジェクトIDを直接設定する方法が見つかりませんでした。しかし、私はそれがすでにservice_keyとデータベースのURLに書かれているので、最初は必要ではないと思います。
ありがとうございます!
編集:
通常のJava SDK(非管理者)がFirebaseOptionsビルダーで構築された( "PROJECT_ID")機能をsetApplicationIdました。しかし、私は少し違う私Firebaseアプリケーションを初期化しています
私と私のために働いている
を見ますsetServiceAccontメソッドが廃止された最新のAdmin SDK 4.1.1を使用しています。あなたのバージョンにダウングレードしようとしましたが、その後、NullPointerExceptionが発生しています。 InputStreamがnullで、新しいSDKバージョンでnull値がチェックされておらず、誤解を招くような "projectIdを設定する必要があります"というエラーが発生していることが判明しました。ありがとう、あなたのコメントは、問題のコアに私を得た –
ガー、それについて申し訳ありません!今後のリリースでこれを更新する予定ですので、このケースではより良いエラーが発生します。 – jwngr
問題ありません。ありがとう –