From 081723600facf34fd2dba385ca79b12b503d59bc Mon Sep 17 00:00:00 2001 From: kim Date: Sat, 12 Dec 2020 01:49:10 +0900 Subject: [PATCH] facebook oauth login --- .../oauth/PrincipalOauth2UserService.java | 18 +++++++++-- .../oauth/provider/FacebookUserInfo.java | 32 +++++++++++++++++++ .../config/oauth/provider/GoogleUserInfo.java | 32 +++++++++++++++++++ .../config/oauth/provider/OAuth2UserInfo.java | 8 +++++ .../src/main/resources/application.yml | 7 ++++ .../main/resources/templates/loginForm.html | 1 + 6 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 spring-security/src/main/java/com/spring/security1/config/oauth/provider/FacebookUserInfo.java create mode 100644 spring-security/src/main/java/com/spring/security1/config/oauth/provider/GoogleUserInfo.java create mode 100644 spring-security/src/main/java/com/spring/security1/config/oauth/provider/OAuth2UserInfo.java diff --git a/spring-security/src/main/java/com/spring/security1/config/oauth/PrincipalOauth2UserService.java b/spring-security/src/main/java/com/spring/security1/config/oauth/PrincipalOauth2UserService.java index e5c27e3e..dfd0e29c 100644 --- a/spring-security/src/main/java/com/spring/security1/config/oauth/PrincipalOauth2UserService.java +++ b/spring-security/src/main/java/com/spring/security1/config/oauth/PrincipalOauth2UserService.java @@ -1,6 +1,9 @@ package com.spring.security1.config.oauth; import com.spring.security1.config.auth.PrincipalDetails; +import com.spring.security1.config.oauth.provider.FacebookUserInfo; +import com.spring.security1.config.oauth.provider.GoogleUserInfo; +import com.spring.security1.config.oauth.provider.OAuth2UserInfo; import com.spring.security1.model.User; import com.spring.security1.repository.UserRepository; import lombok.RequiredArgsConstructor; @@ -30,11 +33,20 @@ public class PrincipalOauth2UserService extends DefaultOAuth2UserService { // userRequest 정보 -> loadUser함수 -> 구글로 부터 회원 프로필 받아준다. System.out.println("userRequest: "+ oAuth2User.getAttributes()); - String provider = userRequest.getClientRegistration().getRegistrationId(); // google - String providerId = oAuth2User.getAttribute("sub"); + 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()); + } + + String provider = oAuth2UserInfo.getProvider(); + String providerId = oAuth2UserInfo.getProviderId(); String username = provider+"_"+providerId; String password = bCryptPasswordEncoder.encode("패스워드"); - String email = oAuth2User.getAttribute("email"); + String email = oAuth2UserInfo.getEmail(); String role = "ROLE_USER"; User userEntity = userRepository.findByUsername(username); diff --git a/spring-security/src/main/java/com/spring/security1/config/oauth/provider/FacebookUserInfo.java b/spring-security/src/main/java/com/spring/security1/config/oauth/provider/FacebookUserInfo.java new file mode 100644 index 00000000..eca002ed --- /dev/null +++ b/spring-security/src/main/java/com/spring/security1/config/oauth/provider/FacebookUserInfo.java @@ -0,0 +1,32 @@ +package com.spring.security1.config.oauth.provider; + +import java.util.Map; + +public class FacebookUserInfo implements OAuth2UserInfo { + + private Map attributes; // oauth2User.getAttributes() + + public FacebookUserInfo(Map 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"); + } +} diff --git a/spring-security/src/main/java/com/spring/security1/config/oauth/provider/GoogleUserInfo.java b/spring-security/src/main/java/com/spring/security1/config/oauth/provider/GoogleUserInfo.java new file mode 100644 index 00000000..04476149 --- /dev/null +++ b/spring-security/src/main/java/com/spring/security1/config/oauth/provider/GoogleUserInfo.java @@ -0,0 +1,32 @@ +package com.spring.security1.config.oauth.provider; + +import java.util.Map; + +public class GoogleUserInfo implements OAuth2UserInfo { + + private Map attributes; // oauth2User.getAttributes() + + public GoogleUserInfo(Map attributes) { + this.attributes = attributes; + } + + @Override + public String getProviderId() { + return (String) attributes.get("sub"); + } + + @Override + public String getProvider() { + return "google"; + } + + @Override + public String getEmail() { + return (String) attributes.get("email"); + } + + @Override + public String getName() { + return (String) attributes.get("name"); + } +} diff --git a/spring-security/src/main/java/com/spring/security1/config/oauth/provider/OAuth2UserInfo.java b/spring-security/src/main/java/com/spring/security1/config/oauth/provider/OAuth2UserInfo.java new file mode 100644 index 00000000..1cfeb7da --- /dev/null +++ b/spring-security/src/main/java/com/spring/security1/config/oauth/provider/OAuth2UserInfo.java @@ -0,0 +1,8 @@ +package com.spring.security1.config.oauth.provider; + +public interface OAuth2UserInfo { + String getProviderId(); + String getProvider(); + String getEmail(); + String getName(); +} diff --git a/spring-security/src/main/resources/application.yml b/spring-security/src/main/resources/application.yml index 24f2f3a9..79b05be0 100644 --- a/spring-security/src/main/resources/application.yml +++ b/spring-security/src/main/resources/application.yml @@ -31,3 +31,10 @@ spring: scope: - email - profile + + facebook: + client-id: 1135697936892001 + client-secret: 681e0ce30d4fdf4df0ed28874a85b1af + scope: + - email + - public_profile diff --git a/spring-security/src/main/resources/templates/loginForm.html b/spring-security/src/main/resources/templates/loginForm.html index 2bd90d27..d5f9f938 100644 --- a/spring-security/src/main/resources/templates/loginForm.html +++ b/spring-security/src/main/resources/templates/loginForm.html @@ -13,6 +13,7 @@ 구글 로그인 + 페이스북 로그인 회원가입을 아직 하지 않으셨나요? \ No newline at end of file