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을 업데이트해야 해서 있는 코드이니 본인의 프로젝트에 따라서 커스텀하면 됩니다.