ABOUT ME

-

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

Designed by Tistory.