Health-Genie
[이메일] univCert api를 사용한 대학 이메일 인증
j9972
2023. 12. 21. 03:19
728x90
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을 업데이트해야 해서 있는 코드이니 본인의 프로젝트에 따라서 커스텀하면 됩니다.