2017-02-05 11 views
0

사용자의 ID 토큰을 확인하려고합니다. 나는 verifyIdToken를 호출 할 때마다 다음과 같은 오류가 발생 기능 :Firebase Java admin SDK 오류

java.lang.IllegalArgumentException가 : 나는했습니다

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)); 
    } 
} 

: projectId은 여기

서블릿 코드를 설정해야합니다 문서를 통해 진행되었으며 프로젝트 ID를 직접 설정하는 방법을 찾지 못했습니다. 그러나 나는 그것이 service_key와 database url에 이미 쓰여졌 기 때문에 처음부터 필요하지 않아야한다고 생각한다.

감사합니다.

편집 : FirebaseOptions 빌더에 내장

일반 자바 SDK (비 관리자가) setApplicationId있다 ("PROJECT_ID") 함수. 그러나 나는 조금 다른 내 중포 기지 앱을 초기화하고

답변

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

문제 없습니다. 감사 –

관련 문제