REST API 스팸 방지 및 CAPTCHA 지원
모델이 REST API를 통해 수정 가능한 경우, 스팸 또는 스팸 관련 속성을 수정할 수 있는 관련 API 엔드포인트도 지원해야 합니다. 이는 POST
및 PUT
뮤테이션을 확실히 포함하지만, 모델의 기밀/공개 플래그를 변경하는 등 다른 경우도 포함될 수 있습니다.
REST 엔드포인트에 지원 추가
주요 단계는 다음과 같습니다:
-
resource
에helpers SpammableActions::CaptchaCheck::RestApiActionsSupport
를 추가합니다. - Update 서비스 클래스 생성자에
perform_spam_check: true
를 전달합니다. 생성 서비스에서는 기본적으로true
로 설정됩니다. -
Spammable
모델 인스턴스를 생성하거나 업데이트 한 후,#check_spam_action_response!
를 호출하여 생성하거나 업데이트한 인스턴스를 변수에 저장합니다. - 요청의
failure
케이스에 대한 오류 처리 로직을 식별합니다. 이는 만약 생성 또는 업데이트에 실패한 경우 가능한 스팸 감지를 나타내며, 이는Spammable
인스턴스에 오류를 추가합니다. 이 오류는 일반적으로render_api_error!
또는render_validation_error!
와 유사합니다. - 기존 오류 처리 로직을
with_captcha_check_rest_api(spammable: my_spammable_instance)
호출로 래핑합니다. 이때spammable:
이름있는 인자로 변수에 저장한Spammable
모델 인스턴스를 전달합니다. 이 호출은 다음과 같은 작업을 수행합니다:- 모델에서 필요한 스팸 확인을 수행합니다.
- 스팸이 감지되면:
- 설명적인 스팸 특정 오류 메시지와 함께 Grape
#error!
예외를 발생시킵니다. - 응답에 오류 필드로 추가된 관련 정보를 포함시킵니다. 이러한 필드에 대한 자세한 내용은 REST API 문서의 스팸으로 감지된 요청 해결 부분을 참조하십시오.
- 설명적인 스팸 특정 오류 메시지와 함께 Grape
표준 ApolloLink 또는 Axios 인터셉터 CAPTCHA 지원을 사용하는 경우 위의 필드 세부 정보는 무시할 수 있습니다. 왜냐하면 이러한 것들은 자동으로 처리되기 때문에 눈에 띄게되고 있습니다. 이것들은 만약 잠재적인 스팸을 체크하고 해결된 CAPTCHA 응답으로 요청을 다시 제출하려고 GraphQL API를 직접 사용하려고 하는 경우에 유효해집니다.
snippets
리소스에 대한 post
및 put
액션에 대한 예시는 다음과 같습니다:
module API
class Snippets < ::API::Base
#...
resource :snippets do
# 이 헬퍼는 `#with_captcha_check_rest_api`를 제공합니다
helpers SpammableActions::CaptchaCheck::RestApiActionsSupport