이제 토큰을 이용해서
사용자 정보만 받아주면 된다!
https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#req-user-info
Content-type: application/x-www-form-urlencoded;charset=utf-8
Authorization: Bearer {ACCESS_TOKEN}
바디는 없다!
네이버에서 했던 것 처럼만들어주자!
service
headers.add("Authorization", "Bearer "+kakaoToketnDto.getAccess_token());
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
헤더를 만들어 준다
여기서 주의할 점
얘는
JSONObject가 아닌
<MultiValueMap<String,String>로 보내줘야 하고
DTO
private LinkedHashMap<String,String> profile;라는걸 주는데
걷보기에는 json형식 같아서 JSONObject로 받으려고 했는데
실패했다 그래서 오류를 보니 LinkedHashMap를 JSONObject로
파싱 할 수 없다는 오류가 떠서 LinkedHashMap<String,String>를
사용해 줬다!
결과
kakaoAccountDto(email_needs_agreement=false, profile_nickname_needs_agreement=false, profile={nickname=실제이름이라 변조합니다}, is_email_valid=true, is_email_verified=true, has_email=true, email=실제이메일이여서변조합니다)
뭔가 복잡한 게 온다
이제 회원가입 판별을 해주고
시큐리티에 로그인 처리를 해주자!
service
if(userservice.confrimEmail(email)==false)
이메일이 존재하지 않는다면 =처음 온 경우
JSONObject jsonObject=new JSONObject();
jsonObject.put("id", kakaoLoginDto.getId());
jsonObject.put("name", kakaoAccountDto.getProfile().get("nickname"));
jsonObject.put("provider", "kakao");
userservice.insertOauthLogin(jsonObject, email,apikey, "010-테스트중-못받음");
값들을 세팅해서
userservice.insertOauthLogin(jsonObject, email,apikey, "010-테스트중-못받음");
회원가입을 진행시킨다!
utilservice.setAuthentication(email, apikey);
얘는 네이버 할 때 써져있다!
https://cordingmonster.tistory.com/86
결과
db
2021-07-12 12:24:38 | 실제 이메일 | true | 실제이름 | kakao | kako측id | $2a$10$ICPOQfqG9Cft0GEO8N5hSOeZCADjedTUQIDvRSrnMpt.iVWzrX4ga | NULL | ROLE_USER | 010-테스트중-못받음 | true |
로그인+db저장 성공!
+추가
controller
끝난뒤 꼭 리다이렉트를 해주자
return "redirect:/";
'Spring boot kim's cafe > oauth로그인' 카테고리의 다른 글
Springboot 카카오로그인!(2) 토큰받기 (0) | 2021.07.12 |
---|---|
Springboot 카카오로그인!(1) 인가코드 받기! (0) | 2021.07.12 |
Springboot 네이버로그인!(3) 완료 with Authentication ,AuthenticationManager,SecurityCont (0) | 2021.07.10 |
Springboot 네이버로그인!(2) 토큰받기! (0) | 2021.07.10 |
Springboot 네이버로그인!(1) code받기 state만들기 (0) | 2021.07.10 |