Cara menyemak kedalaman dan kerumitan pertanyaan dalam Rumah Api Laravel
P粉419164700
P粉419164700 2023-08-28 21:26:41
0
1
561
<p>Sebelum menggunakan rumah api ke pelayan pengeluaran, saya menyemak keselamatan (https://www.howtographql.com/advanced/4-security/). Jadi saya memutuskan untuk menyemak kedalaman pertanyaan dan kerumitan pertanyaan. </p> <p>Dalam dokumentasi rumah api, mereka menyebut <code>config/lighthouse.php</code>. </p> <pre class="brush:php;toolbar:false;">/* |------------------------------------------------ ----------------------- | |------------------------------------------------ ----------------------- | |. Control Lighthouse untuk mengendalikan pengesahan pertanyaan berkaitan keselamatan. |. Bacaan terperinci: https://webonyx.github.io/graphql-php/security/ | */ 'keselamatan' => 'max_query_complexity' => 'max_query_depth' => GraphQLValidatorRulesQueryDepth::DISABLED 'disable_introspection' => GraphQLValidatorRulesDisableIntrospection::DISABLED, ], </pra> <p>Dan adalah disyorkan untuk membaca https://webonyx.github.io/graphql-php/security/. </p> <p>Dalam pautan ini mereka memberikan beberapa contoh: </p> <pre class="brush:php;toolbar:false;">gunakan GraphQLGraphQL; gunakan GraphQLValidatorRulesQueryComplexity; gunakan GraphQLValidatorDocumentValidator; $rule = new QueryComplexity($maxQueryComplexity = 100); DocumentValidator::addRule($rule); GraphQL::executeQuery(/*...*/); </pra> <pre class="brush:php;toolbar:false;">gunakan GraphQLGraphQL; gunakan GraphQLValidatorRulesQueryDepth; gunakan GraphQLValidatorDocumentValidator; $rule = new QueryDepth($maxDepth = 10); DocumentValidator::addRule($rule); GraphQL::executeQuery(/*...*/); </pra> <p>Tetapi bagaimana untuk menggunakan ini dalam rumah api? </p> <p>Mula-mula, saya menulis kod ini ke dalam <kod>ExampleQuery.php(php artisan lighthouse:query ExampleQuery)</code>. </p> <pre class="brush:php;toolbar:false;">kelas akhir ContohQuery { fungsi awam __invoke(_, array $args) { $rule = QueryComplexity(2); DocumentValidator::addRule($rule); $rule2 = new QueryDepth(2); DocumentValidator::addRule($rule2); kembali [ ... ]; } } </pra> <p>Tetapi ini tidak akan menimbulkan sebarang masalah.</p> <p>Saya rasa rumah api dimulakan dalam <code>vendor/nuwave/.../GraphQLController.php</code> jadi saya tidak dapat melaksanakan <code>GraphQL::executeQuery(/*...* / );</code></p> Arahan <p><code>@complexity</code> juga tidak berfungsi, <code>@complexity(penyelesai: "App\Security\ComplexityAnalyzer@userPosts")</code> fungsi userPosts. </p> <pre class="brush:php;toolbar:false;">class ComplexityAnalyzer { fungsi awam userPosts(int $childrenComplexity, array $args): int // tidak dipanggil { $postComplexity = $args['includeFullText'] ? 3 : 2; Log::Debug($postComplexity); // tidak dipanggil pulangkan $childrenComplexity * $postComplexity; } } </pra> <p>Apa yang saya terlepas? Tolong bantu saya tidur lena. </p>
P粉419164700
P粉419164700

membalas semua(1)
P粉717595985

Ia sudah dilaksanakan, anda hanya perlu tetapkan nilai.

'security' => [
        'max_query_complexity' => 100,
        'max_query_depth' => 10,
    ],

Pengiraan markah kerumitan boleh diubah suai untuk setiap medan menggunakan arahan @complexity.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!