2017-02-05 21 views
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アプリケーションを初期化しています

答えて

1

管理SDKには、このようなオプションはありません、私のコードこれは、管理SDKバージョン4.0.4

+1

私と私のために働いている

InputStream in = Thread.currentThread().getContextClassLoader() .getResourceAsStream("/WEB-INF/service_key.json"); FirebaseOptions options = new FirebaseOptions.Builder() .setServiceAccount(in) .setDatabaseUrl(".....") .build(); 

を見ますsetServiceAccontメソッドが廃止された最新のAdmin SDK 4.1.1を使用しています。あなたのバージョンにダウングレードしようとしましたが、その後、NullPointerExceptionが発生しています。 InputStreamがnullで、新しいSDKバージョンでnull値がチェックされておらず、誤解を招くような "projectIdを設定する必要があります"というエラーが発生していることが判明しました。ありがとう、あなたのコメントは、問題のコアに私を得た –

+1

ガー、それについて申し訳ありません!今後のリリースでこれを更新する予定ですので、このケースではより良いエラーが発生します。 – jwngr

+0

問題ありません。ありがとう –

関連する問題