-
[이메일] univCert api를 사용한 대학 이메일 인증Health-Genie 2023. 12. 21. 03:19728x90
API를 사용해서 대학교 이메일을 인증하기!
필요한 자료는 github 주소와 해당 api 도메인을 남기겠습니다.
api 제공 사이트 : https://univcert.com/instruction
깃허브 주소 : https://github.com/SINZAK/sinzak-backend/tree/main
필요하게 추가해야하는 부분은 아래 부분을 gradle에 추가해줘야 합니다.
repositories { mavenCentral() maven { url 'https://jitpack.io' } } dependencies { implementation 'com.github.in-seo:univcert:master-SNAPSHOT' implementation group: 'com.squareup.okhttp', name: 'okhttp', version: '2.7.5' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.2.2' implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1' }
이메일 인증 코드 보내기
@PostMapping("/send") public ResponseEntity<Result> sendUnivCertMail(@RequestBody MailRequestDto dto) throws IOException { UnivCert.clear(KEY, dto.getUniv_email()); boolean univ_check = false; Map<String,Object> check = UnivCert.check(dto.getUnivName()); boolean success = (boolean) check.get("success"); if(success) univ_check = true; Map<String, Object> result = UnivCert.certify(KEY, dto.getUniv_email(), dto.getUnivName(), univ_check); if((boolean) result.get("success")) { userMailService.updateUniv(dto.getUnivName()); } return ResponseEntity.ok(Result.of("이메일이 성공적으로 보내졌습니다.")); }
dto로는 대학교 email과 대학교 name를 받아옵니다.
참고로 KEY는 api 제공 사이트에서 회원가입후 발급이 가능합니다.
저같은 경우는 발급을 한 후에 yml에 써주었습니다
univCert: key: ENC(KzaGhlaBtciQefFWMQFbhCug2P2ax7E0cU3zE5Juo6VBwZ/Gu1WiDnJWiO/saWN5)
참고로 ENC는 암호화한것인데, https://techj9972.tistory.com/174 를 참고하시면 됩니다!
api를 사용해 해당 학교가 있는지 확인하고 있다면 해당 메일로 code를 보내는 함수를 만들었습니다.
그리고 해당 메소드 실행시 clear()를 사용했는데, api에 해당 유저에게 인증코드를 보낸 후 clear() 없이 재호출하면 400번대 에러가 나니 작성을 염두해 주세요!!
이렇게 보내고 나서 코드를 verify하는 부분은
@GetMapping("/verify") public ResponseEntity<Result> validMailCode(@RequestBody MailRequestDto dto) throws IOException { Map<String, Object> response = UnivCert.certifyCode(KEY, dto.getUniv_email(), dto.getUnivName(), dto.getCode()); boolean success = (boolean) response.get("success"); if(success) { userMailService.updateUnivVerify(); } return ResponseEntity.ok(Result.of(success ? "검증이 성공했습니다" : "검증이 실패했습니다")); }
이런식으로 api의 certify 메소드 호출을 통해서 인증을 해보았습니다.
참고로 validMailCode의 if문은 저의 프로젝트는 이메일 인증후, 인증했음을 update해야함이고, sendUnivCertMail의 if - updateUniv는 user의 col중 uniName의 col을 업데이트해야 해서 있는 코드이니 본인의 프로젝트에 따라서 커스텀하면 됩니다.
'Health-Genie' 카테고리의 다른 글
[error] cannot deserialize from Object value (no delegate- or property-based Creator) (2) 2024.01.13 [에러] JSON parse error (2) 2024.01.06 [에러] broken pipe 에러 (0) 2023.12.20 [postman] api 문서 만들기 (2) 2023.12.11 [타입 고민] 엔티티에 정수 타입으로 Int VS Integer (1) 2023.12.08