본문 바로가기
개발/Spring

[Spring] 스프링시큐리티 OAuth2.0 적용해보기(Facebook)

by devhooney 2022. 9. 1.
728x90

이번엔 페이스북 로그인을 작업해보려한다.

 

지난 포스팅에 사용했던 코드에 이어서 작업하려한다.

https://devhooney.tistory.com/100

 

[Spring] 스프링시큐리티 OAuth2.0 적용해보기(Google)

구글, 페이스북, 네이버 로그인을 적용해보려고 한다. 지난 포스팅에 사용했던 코드에 이어서 작업하려한다. https://devhooney.tistory.com/99 [Spring] 스프링시큐리티 예제 이전에 작성한 포스팅은 단순

devhooney.tistory.com

 

1. 페이스북 개발자 사이트

- 사이트에 접속해서 내 앱 > 앱 만들기 클릭

- 소비자 선택

- 표시 이름 작성, 선택된 비즈니스 관리자 계정 없음 선택 후 앱 만들기

 

 

- 만들어진 앱 선택 후 Facebook 로그인 빠른 시작 선택

 

- 웹 선택

 

 

- 사이트 URL에 본인의 URL을 작성(localhost:8080)

- 다음 선택하고 마지막에 돌아가기 클릭

- 설정 > 기본 설정 페이지에 앱ID와 앱 시크릿 코드가 있다.

 

2. application.yml 수정

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: 구글
            client-secret: 구글
            scope: email, profile

          facebook:
            client-id: 페이스북
            client-secret: 페이스북
            scope: email, public_profile

 

3. PrinciapOauth2UserSerivce 수정

- 페이스북 관련 설정만 추가해주면 된다.

- 기존 코드에 유지보수 및 추가개발이 편하도록 만들었기 때문에.

 

OAuth2User oAuth2User = super.loadUser(userRequest);
OAuth2UserInfo oAuth2UserInfo = null;
if (userRequest.getClientRegistration().getRegistrationId().equals("google")) {
    oAuth2UserInfo = new GoogleUserInfo(oAuth2User.getAttributes());
} else if (userRequest.getClientRegistration().getRegistrationId().equals("facebook")) {
    oAuth2UserInfo = new FacebookUserInfo(oAuth2User.getAttributes()); 
} else {
    System.out.println("Only Google and Facebook");
}

String provider = Objects

 

4. provider 패키지 안에 FacebookUserInfo 클래스 추가

public class FacebookUserInfo implements OAuth2UserInfo{

    private Map<String, Object> attributes; // getAttributes()

    public FacebookUserInfo(Map<String, Object> attributes) {
        this.attributes = attributes;
    }

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

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

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

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

 

5. loginForm.html 수정

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>로그인 페이지</title>
</head>
<body>
<h1>로그인 페이지</h1>
<hr>
<form action="/login" method="POST">
    <input type="text" name="username" placeholder="Username"><br>
    <input type="password" name="password" placeholder="Password"><br>
    <button>로그인</button>
</form>
<a href="/oauth2/authorization/google">구글 로그인</a>
<a href="/oauth2/authorization/facebook">페이스북 로그인</a>
<a href="/joinForm">회원가입을 아직 하지 않으셨나요?</a>
</body>
</html>

 

6. 확인

 

- DB 조회

 

- 구글과 페이스북 로그인으로 회원가입까지 완료했다.

 

 

728x90