InfoGrab DocsInfoGrab Docs

GraphQL API 스팸 보호 및 CAPTCHA 지원

요약

모델이 GraphQL API를 통해 수정될 수 있는 경우, 스팸 가능 속성 또는 스팸 관련 속성을 수정할 수 있는 모든 관련 GraphQL 뮤테이션에도 지원을 추가해야 합니다. 뮤테이션에 include Mutations::SpamProtection을 사용합니다.


GraphQL API 스팸 보호 및 CAPTCHA 지원#

모델이 GraphQL API를 통해 수정될 수 있는 경우, 스팸 가능 속성 또는 스팸 관련 속성을 수정할 수 있는 모든 관련 GraphQL 뮤테이션에도 지원을 추가해야 합니다. 여기에는 CreateUpdate 뮤테이션이 반드시 포함되며, 모델의 기밀/공개 플래그 변경과 관련된 것 등 다른 뮤테이션도 포함될 수 있습니다.

GraphQL 뮤테이션에 지원 추가#

주요 단계는 다음과 같습니다:

  • 뮤테이션에 include Mutations::SpamProtection을 사용합니다.

  • Update Service 클래스 생성자에 perform_spam_check: true를 전달합니다. Create Service에서는 기본적으로 true로 설정되어 있습니다.

  • Spammable 모델 인스턴스를 생성하거나 업데이트한 후, #check_spam_action_response!를 호출하고 모델 인스턴스를 전달합니다. 이 호출은:

    모델에 대해 필요한 스팸 검사를 수행합니다.

    • 스팸이 감지된 경우:

      GraphQL::ExecutionError 예외를 발생시킵니다.

      • extensions: 파라미터를 통해 응답의 오류 필드로 관련 정보를 추가합니다. 이 필드에 대한 자세한 내용은 GraphQL API 문서의 스팸으로 감지된 뮤테이션 해결 섹션을 참조하세요.

    위에서 설명한 표준 ApolloLink 또는 Axios 인터셉터 CAPTCHA 지원을 사용하는 경우, 이 필드들은 자동으로 처리되므로 필드 세부 정보를 무시할 수 있습니다. 잠재적 스팸에 대한 실패 검사를 처리하고 해결된 CAPTCHA 응답으로 요청을 재제출하기 위해 GraphQL API를 직접 사용하려는 경우에만 관련이 있습니다.

예를 들면:

module Mutations
  module Widgets
    class Create < BaseMutation
      include Mutations::SpamProtection

      def resolve(args)
        service_response = ::Widgets::CreateService.new(
          project: project,
          current_user: current_user,
          params: args
        ).execute

        widget = service_response.payload[:widget]
        check_spam_action_response!(widget)

        # If possible spam was detected, an exception would have been thrown by
        # `#check_spam_action_response!`, so the normal resolve return logic can follow below.
      end
    end
  end
end

GraphQL API에서 CAPTCHA 동작을 테스트하는 방법에 대한 지침은 탐색적 테스트 섹션을 참조하세요.

GraphQL API 스팸 보호 및 CAPTCHA 지원

GitLab v19.1
원문 보기
요약

모델이 GraphQL API를 통해 수정될 수 있는 경우, 스팸 가능 속성 또는 스팸 관련 속성을 수정할 수 있는 모든 관련 GraphQL 뮤테이션에도 지원을 추가해야 합니다. 뮤테이션에 include Mutations::SpamProtection을 사용합니다.


GraphQL API 스팸 보호 및 CAPTCHA 지원#

모델이 GraphQL API를 통해 수정될 수 있는 경우, 스팸 가능 속성 또는 스팸 관련 속성을 수정할 수 있는 모든 관련 GraphQL 뮤테이션에도 지원을 추가해야 합니다. 여기에는 CreateUpdate 뮤테이션이 반드시 포함되며, 모델의 기밀/공개 플래그 변경과 관련된 것 등 다른 뮤테이션도 포함될 수 있습니다.

GraphQL 뮤테이션에 지원 추가#

주요 단계는 다음과 같습니다:

  • 뮤테이션에 include Mutations::SpamProtection을 사용합니다.

  • Update Service 클래스 생성자에 perform_spam_check: true를 전달합니다. Create Service에서는 기본적으로 true로 설정되어 있습니다.

  • Spammable 모델 인스턴스를 생성하거나 업데이트한 후, #check_spam_action_response!를 호출하고 모델 인스턴스를 전달합니다. 이 호출은:

    모델에 대해 필요한 스팸 검사를 수행합니다.

    • 스팸이 감지된 경우:

      GraphQL::ExecutionError 예외를 발생시킵니다.

      • extensions: 파라미터를 통해 응답의 오류 필드로 관련 정보를 추가합니다. 이 필드에 대한 자세한 내용은 GraphQL API 문서의 스팸으로 감지된 뮤테이션 해결 섹션을 참조하세요.

    위에서 설명한 표준 ApolloLink 또는 Axios 인터셉터 CAPTCHA 지원을 사용하는 경우, 이 필드들은 자동으로 처리되므로 필드 세부 정보를 무시할 수 있습니다. 잠재적 스팸에 대한 실패 검사를 처리하고 해결된 CAPTCHA 응답으로 요청을 재제출하기 위해 GraphQL API를 직접 사용하려는 경우에만 관련이 있습니다.

예를 들면:

module Mutations
  module Widgets
    class Create < BaseMutation
      include Mutations::SpamProtection

      def resolve(args)
        service_response = ::Widgets::CreateService.new(
          project: project,
          current_user: current_user,
          params: args
        ).execute

        widget = service_response.payload[:widget]
        check_spam_action_response!(widget)

        # If possible spam was detected, an exception would have been thrown by
        # `#check_spam_action_response!`, so the normal resolve return logic can follow below.
      end
    end
  end
end

GraphQL API에서 CAPTCHA 동작을 테스트하는 방법에 대한 지침은 탐색적 테스트 섹션을 참조하세요.