Spring Boot

[Spring Boot] 로그인 기능 구현 (8) - 페이스북 로그인 (OAuth 2.0)

공대생안씨 2024. 1. 14. 23:57

2024.01.14 - [Spring Boot] - [Spring Boot] 로그인 기능 구현 (5) - 구글 로그인 (OAuth 2.0)

2024.01.14 - [Spring Boot] - [Spring Boot] 로그인 기능 구현 (6) - 카카오 로그인 (OAuth 2.0)

2024.01.14 - [Spring Boot] - [Spring Boot] 로그인 기능 구현 (7) - 네이버 로그인 (OAuth 2.0)

 

  • OAuth 2.0 관련 구글, 카카오, 네이버 까지 다룸
  • 마지막으로 페이스북 로그인을 다룰 차례
  • 네이버 로그인 까지 마친 코드를 수정하는 방식으로 페이스북 로그인 다룰 것

 

1. OAuth 사용 페이스북 로그인 구현

 

1-0. 시작하기

 

1-1. 앱 추가하기

  • 내 앱 > 앱 만들기
  • 앱에 필요한 기능 선택 : 기타
  • 앱 유형 선택 : 소비자
  • 앱 이름 : OAuth 2.0 로그인 예제
  • 앱 연락처 이메일 : 본인 이메일
  • 앱 만들기
  • 앱에 제품 추가 : Facebook 로그인 > 설정

  • 플랫폼 : 웹
  • 사이트 URL : http://localhost:8080 > save

 

1-2. application.yml 수정

# application.yml에 아래 설정 추가

spring:
  security:
    oauth2:
      client:
        registration:
          facebook:
            client-id: [앱 설정에서 확인 가능한 앱 ID]
            client-secret: [앱 설정에서 확인 가능한 앱 시크릿 코드]
            scope:
              - email
              - public_profile

 

  • client-id, client-secret 확인 방법
    • 대시보드 > 앱 설정 > 기본 설정에서 확인 가능!

 

1-3. FacebookUserDetails 추가

@AllArgsConstructor
public class FacebookUserDetails implements OAuth2UserInfo {

    private Map<String, Object> attributes;

    @Override
    public String getProvider() {
        return "facebook";
    }

    @Override
    public String getProviderId() {
        return (String) attributes.get("id");
    }

    @Override
    public String getEmail() {
        return (String) attributes.get("email");
    }

    @Override
    public String getName() {
        return (String) attributes.get("name");
    }
}

 

1-4. CustomOauth2UserService 수정

// 기존의 코드 중 else if (provider.equals("naver"))의 밑에 아래 코드 추가

        else if (provider.equals("facebook")) {
            log.info("페이스북 로그인");
            oAuth2UserInfo = new FacebookUserDetails(oAuth2User.getAttributes());
        }

 

log.info()로 찍어본 attributes

더보기

getAttributes : {id=2578627312312548, name=안창민, email=chm2006@naver.com}

이러한 attributes의 구조를 바탕으로 FacebookUserDetails에서 값을 추출함

 

1-5. login.html 수정

  • a href 태그 추가하여 페이스북 로그인 가능하게 수정
<a href="/oauth2/authorization/facebook">페이스북 로그인</a>

 

2. 실행 결과

 

2-1. 로그인 화면

  • 페이스북 로그인 항목이 추가됨

 

2-2. 페이스북 로그인 클릭 시

  • 페이스북 로그인 기능 확인

 

2-3. 페이스북 로그인 이후 마이페이지

  • ID : "provider(facebook)"_"providerId" 형태

 

2-4. MySQL에서 확인

  • 페이스북 로그인 한 회원이 DB에 저장됨을 확인