개발 일기

FirebaseOAuth Google Login 구현하기 본문

카테고리 없음

FirebaseOAuth Google Login 구현하기

flow123 2022. 2. 18. 10:43

1. 프로젝트 셋업 

Google -> 사용설정 -> 프로젝트 이름/ 지원 이메일을 설정하고 저장하기.

 

Build.gradle 추가해주자

implementationgroup:'com.google.firebase',name:'firebase-admin',version:'8.0.1'
implementation'org.springframework.boot:spring-boot-starter-security'

 

시스템 -> 고급 시스템 설정 -> 시스템 속성

환경변수 -> 새로 만들기

 

 

Google credentials 값과 함께, 변수 값은 파일 찾아보기로 직접 넣어줘도 된다

 

2. FireBase 초기화, 인증 토큰 검증

 

FirebaseInitializer 라는 Configuration 만들고, FirebaseAuth(인증 관련 모듈)을 초기화해보자. 

특정 FirebaeAPP 전용 FirebaseAuth 인스턴스를 가져오는 단계이다. 

 

@Configuration
public class FirebaseConfig {
    @Bean
    public void firebaseAuth() throws IOException {
        FirebaseOptions options = FirebaseOptions.builder()
                .setCredentials(GoogleCredentials.getApplicationDefault())
                .build();
        FirebaseApp.initializeApp(options);
//        return FirebaseAuth.getInstance(FirebaseApp.getInstance());


    }
}

 

*에러

getInstance 에서 getFirebaseApp() 이 불러지지 않고 cannot resolve method getFirebaseApp이라고 뜬다.

 

1차 시도방법 

(1) 환경변수는 시스템 환경변수 편집에서 직접 파일 찾아보기로 넣어주었고 

혹시 몰라서 윈도우 쉘에도 위의 명령어로 (위치와 파일명 포함해서) 도 해보았는데 똑같다. .

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

 

(2) build.gradle도 추가 후에 dependency run 해주었는데 파일을 못읽어오는 듯하다. 

 

2차 시도 

ClassPathResource를 써보자. 

@Bean
    public FirebaseAuth firebaseAuth() throws IOException {

        ClassPathResource key = new ClassPathResource("src/main/resources/codingyo-firebase-adminsdk.json");

        FirebaseOptions options = new FirebaseOptions.Builder()
                .setCredentials(GoogleCredentials.fromStream(key.getInputStream()))
                .build();
        FirebaseApp.initializeApp(options);
        return FirebaseAuth.getInstance(FirebaseApp.getInstance());
    }


}

아래 블로그를 참고해서, 주소를 없애보았다. 생각해보니 ClassPathResource 이니 주소 전체를 붙여주는 InputStream 과 달리 파일 명만 넣어줘도 될 것 같았다. 

 

@Bean
    public FirebaseAuth firebaseAuth() throws IOException {

        ClassPathResource key = new ClassPathResource("codingyo-firebase-adminsdk.json");

        FirebaseOptions options = FirebaseOptions.builder()
//        FirebaseOptions options = new FirebaseOptions.Builder()
                .setCredentials(GoogleCredentials.fromStream(key.getInputStream()))
                .build();
        FirebaseApp.initializeApp(options);
        return FirebaseAuth.getInstance(FirebaseApp.getInstance());
    }

 

이제 잘 받아와진다 :) 

 

참고 https://firebase.google.com/docs/admin/setup?hl=ko#java

Comments