11. 페이스북 로그인 완료
by 볼빵빵오춘기페이스북 개발자센터에서 내 앱 설정
- ‘페이스북 api 콘솔’ 검색하여 facebook 개발자 센터 사이트에 들어간다.
- 내 앱 추가한다.(앱 등록이 처음이라면 ‘내 앱’ 이라는 메뉴가 안보이니 잘 찾아서 들어가기)
- 내 앱등록한다.
- facebook 로그인 설정한다.
- 설정 > 기본설정에서 웹 ID, 앱 시크릿 코드 확인 후 복사해놓는다.
application.properties
facebook 설정을 한다.
구글에 썼던 부분 복사해서 google 부분 facebook으로 변경한다. 추가로 google에서 scope 부분은 페이스북에서 구글에선 porfile을 public_profie로 설정을 해줘야한다.
페이스북 개발자센터에서 복사해 둔 앱ID, 앱 시크릿 코드로 변경해준다.
#oauth - facebook login
spring.security.oauth2.client.registration.facebook.client-id=871262391271198
spring.security.oauth2.client.registration.facebook.client-secret=53a088be8f74e301c02246285ed14241
spring.security.oauth2.client.registration.facebook.scope=email,public_profile
loginForm.html
페이스북 로그인 링크 추가해준다.
<a href="/oauth2/authorization/google">구글 로그인</a>
<a href="/oauth2/authorization/facebook">페이스북 로그인</a>
<a href="/joinForm">회원가입을 아직 하지 않으셨나요?</a>
OAuth2UserInfo
public interface OAuth2UserInfo {
String getProviderId();
String getProvider();
String getEmail();
String getName();
}
GoogleUserInfo, FacebookUserInfo
- GoogleUserInfo.java 작성 후 파일 자체를 복사하여 파일이름을 FacebookUserInfo.java 로 변경 한다.
- getProvider()의 리턴값 “facebook”으로 변경한다.
- getProviderId() 에서 sub를 id로 변경한다.
public class GoogleUserInfo implements OAuth2UserInfo{
@Override
public String getProviderId() {
return (String) attributes.get("sub"); // (String 분이기)
}
@Override
public String getProvider() {
return "google";
}
@Override
public String getEmail() {
return (String) attributes.get("email");
}
@Override
public String getName() {
return (String) attributes.get("name");
}
}
PrincipalOauth2UserService
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
System.out.println("loadUser() - getClientRegistration : "+userRequest.getClientRegistration()); // 어떤 OAuth로 로그인했는지 확인가능
System.out.println("loadUser() - getAccessToken : "+userRequest.getAccessToken().getTokenValue());
OAuth2User oAuth2User = super.loadUser(userRequest);
// 구글 로그인 버튼 클릭 -> 구글 로그인 창 -> 로그인 완료 -> code를 리턴받음(OAuth-Client라이브러리) -> AccessToken 요청
// => 여기까지가 userReequest 정보
// userReequest 정보 -> loadUser함수을 통해 구글 회원프로필 받음
System.out.println("loadUser() - getAttributes : "+super.loadUser(userRequest).getAttributes());
System.out.println("loadUser() - getAttributes : "+oAuth2User.getAttributes());
// 회원가입을 강제로 진행
// 소셜로그인 - facebook, google 어떤 걸로 들어왔는지 확인
OAuth2UserInfo oAuth2UserInfo = null;
if(userRequest.getClientRegistration().getRegistrationId().equals("google")){
System.out.println("구글 로그인 요청");
oAuth2UserInfo = new GoogleUserInfo(oAuth2User.getAttributes());
}else if(userRequest.getClientRegistration().getRegistrationId().equals("facebook")){
System.out.println("페이스북 로그인 요청");
oAuth2UserInfo = new FacebookUserInfo(oAuth2User.getAttributes());
}else{
System.out.println("우리는 구글과 페이스북만 지원");
}
String provider = oAuth2UserInfo.getProvider(); // google
String providerId = oAuth2UserInfo.getProviderId();
String username = provider+"_"+providerId; //
String email = oAuth2UserInfo.getEmail();
String role = "ROLE_USER";
User userEntity = userRepository.findByUsername(username);
if(userEntity==null){
System.out.println("구글 로그인 최초입니다.");
userEntity = User.builder()
.username(username)
.password("")
.email(email)
.role(role)
.provider(provider)
.providerId(providerId)
.build();
userRepository.save(userEntity);
}else{
System.out.println("소셜 로그인을 이미 한적이 있습니다. 당신은 자동회원가입이 되어 있습니다. ");
}
return new PrincipalDetails(userEntity,oAuth2User.getAttributes());
}
'강의 따라하기 > Security1' 카테고리의 다른 글
12. 네이버 로그인 완료 (0) | 2024.07.11 |
---|---|
10. 구글 로그인 및 자동 회원가입 진행 완료 (0) | 2024.03.20 |
9. Authentication객체가 가질수 있는 2가지 타입 (0) | 2024.02.27 |
8. 구글 회원 프로필 정보 받아보기 (0) | 2024.02.27 |
7. 구글 로그인 준비 (1) | 2024.02.27 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기