서론

    이전의 Nuxt3 google ReCaptcha 사용하기 글의 연장이다.
    맞춤법 검사기 를 구성하며 Nuxtjs 3와 FastAPI로 웹개발을 한 기록이다.

    이번 이야기는 Nuxt3에서 받아온 ReCaptcha Token을 FastAPI에서 검증하는 방법에 대한 이야기다. 같은 방법으로 Django나 Node.js 등 다양한 언어에서 적용이 가능하니 참고하기 바란다.

     

     

    본론

    ChatGPT의 도움을 조금 받았다. (아니 사실 엄청 많이 받았다.)

    간단히 HTTP Request를 양식에 맞춰 보내는 것만으로도 ReCaptcha 토큰의 검증은 끝난다.
    아래는 FastAPI에서 실행시키기 위한 간단한 코드다.

    from fastapi import HTTPException
    import httpx
    
    
    async def recaptcha_handler(recaptcha_response: str) -> bool:
        url = 'https://www.google.com/recaptcha/api/siteverify'
        data = {
            'secret': RECAPTCHA_SECRET_KEY,
            'response': recaptcha_response,
        }
    
        async with httpx.AsyncClient() as client:
            response = await client.post(url, data=data)
        result = response.json()
    
        if not result.get('success', False):
            raise HTTPException(status_code=500, detail='reCAPTCHA verification failed')
        return True
    

    FastAPI의 AsyncIO를 적절히 이용하기 위해 AsyncIO를 지원하는 httpx 라이브러리를 사용하는 모습이다.

    url에 발급받은 SECRET_KEY와 response token(클라이언트에서 넘어온 Token 이야기다!)을 POST 요청하면 { 'success': Bool } 형식으로 데이터가 넘어온다. 다른 데이터가 더 있을지도 모르지만 우리에게 중요한 필드는 'success' 필드다.
    200 OK가 아닌 다른 데이터가 넘어오는 것에 대한 대응을 위해 Dict.get()을 활용한다. 이 method의 두번째 인자는 필드를 찾지 못했을 때의 기본값이다.

    결론

    간단한 HTTP 요청만으로 ReCaptcha에 대한 검증을 바로 할 수 있다.
    심지어 ReCaptcha V3를 이용한다면 의심 유저에게만 캡챠를 진행할 수 있어 편리하고 유저 친화적인 웹 프로그래밍이 가능할 것이다.

    'Python > FastAPI' 카테고리의 다른 글

    FastAPI에서 Huggingface Transformer API를 사용해보자  (0) 2024.05.07
    Posted by dalbodeule