Naver Login
2024. 2. 19. 21:58ㆍSpring Boot
https://developers.naver.com/products/login/api/api.md
네이버 로그인 - INTRO
환영합니다 네이버 로그인의 올바른 적용방법을 알아볼까요? 네이버 로그인을 통해 신규 회원을 늘리고, 기존 회원은 간편하게 로그인하게 하려면 제대로 적용하는 것이 중요합니다! 이에 올바
developers.naver.com
우선 여기서 오픈 API 이용을 신청하자


URL은 앞에 localhost와 포트만 자기 상황에 바꾸면 된다

그 후 주어진 Client Id와 secret을 따로 저장해 둔다
보안 위험이 있으니 secret을 절대로 웹에 공개하지 말자

필요한 library를 추가하고
application.properties에 필요한 설정을 등록한다

id와 secret은 아까 저장한 값을 넣으면 되고
redirect-uri도 아까 설정한 값을 넣으면 된다
public interface oauth2Info {
String getName();
String getProvider();
String getProviderId();
String getEmail();
}
import java.util.Map;
public class naverInfo implements oauth2Info{
private Map<String, Object> attributes;
naverInfo(Map<String, Object> attributes) {
this.attributes = attributes;
}
@Override
public String getProviderId() {
return (String) attributes.get("id");
}
@Override
public String getName() {
return (String) attributes.get("name");
}
@Override
public String getEmail() {
return (String) attributes.get("email");
}
@Override
public String getProvider() {
return "naver";
}
}
여러 로그인 방식을 구현 할 것이니 정보를 저장할 객체는 interface를 상속 받아 만들자
import java.util.Map;
import java.util.Optional;
import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest;
import org.springframework.security.oauth2.client.userinfo.OAuth2UserService;
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Service;
import com.example.demo.customUserDetail.CustomDetail;
import com.example.demo.user.user;
import com.example.demo.user.user_repository;
import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
public class CustomOAuth2Service implements OAuth2UserService<OAuth2UserRequest, OAuth2User>{
private final user_repository repo;
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
System.out.println("userRequest : " + userRequest);
System.out.println("access token : " + userRequest.getAccessToken());
System.out.println("client Registration : " + userRequest.getClientRegistration());
return processOauth2User(userRequest);
}
private OAuth2User processOauth2User(OAuth2UserRequest userRequest) {
OAuth2UserService<OAuth2UserRequest, OAuth2User> delegate = new DefaultOAuth2UserService();
oauth2Info info = null;
String registration = userRequest.getClientRegistration().getRegistrationId();
if(registration.equals("google")) {
info = new googleInfo(delegate.loadUser(userRequest).getAttributes());
}
else if(registration.equals("naver")) {
info = new naverInfo((Map)delegate.loadUser(userRequest).getAttributes().get("response"));
}
else {
System.out.printf("please login by google or naver\n");
}
Optional<user> userOp = repo.findOneByProviderIdAndProvider(info.getProviderId(), info.getProvider());
user user;
if(!userOp.isPresent()) {
user = new user();
user.setProvider(info.getProvider());
user.setProviderId(info.getProviderId());
user.setName(info.getName());
user.setEmail(info.getEmail());
user.setRole("ROLE_USER");
repo.save(user);
}
else {
System.out.printf("user is exist\n");
user = userOp.get();
}
return new CustomDetail(user);
}
}
이제 로그인을 구현 해 주면 된다 Google 로그인만 구했을 때와는 다르게
registration을 통하여 어느 방식으로 로그인 했는지 판별하여 다르게 info 객체를 만들어 로그인을 진행한다
'Spring Boot' 카테고리의 다른 글
| Jpa 순환 참조 N + 1 문제 (0) | 2024.02.27 |
|---|---|
| CORS (1) | 2024.02.24 |
| Web Socket By STOMP (0) | 2024.02.19 |
| Redis Pub/Sub (0) | 2024.02.19 |
| Elasticsearch (0) | 2024.02.13 |