React'te WordPress özel API uç noktası POST isteği başarısız oluyor

oy
16

API'ye kendi özel uç noktalarını eklediğim bir WordPress arka ucum var:

// retrieve countries
register_rest_route( $namespace, '/countries',
    array(
        'methods'  => 'GET',
        'callback' => array( $this, 'get_countries' ),
    )
);

// check answer
register_rest_route( $namespace, '/check_answer',
    array(
        'methods'  => 'POST',
        'callback' => array( $this, 'check_answer' ),
    )
);

Ortamımı şu şekilde ayarladım: https://example.com , React uygulamasının yaşadığı yerdir ve WordPress, https://example.com/wp adresinde bir alt dizindedir.

Benim React başvurum yukarıdaki uç noktalara POST ve GET istekleri yapar. API'nın temel URL'sini ayarladığım bir üretim ortamı değişkenim var. https://example.com/wp/wp-json/game ('oyun' benim ad alanım) ve bu yüzden Axios ile https://example.com/wp/wp-json/game/countries ve https://example.com/wp/wp-json/game/check_answer ve işte sorun geliyor.

Sunucum, React uygulamasına hem olmadan hem de hizmet verecek şekilde yapılandırıldı www . Bu yüzden https://example.com ve https://www.example.com her ikisi de aynı uygulamayı sunar.

Ancak bu, özel uç noktalarım için bazı ilginç sorunlar yaratıyor: GET isteği her zaman işe yarıyor. ancak POST isteği yalnızca https://www.example.com adresinden değil, https://example.com adresinden deniyorsam çalışır. İkincisi durumunda sadece başarısız bir istek gösterir. Yanıt yok, hiçbir şey yok.

Google'ı aradım ve CORS ile ilgili gibi görünüyor, ancak düzeltemedim. Burada bir fikrin var mı?

Oluştur 09/05/2020 saat 11:32
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Öncelikle şunu belirtmek isterim ki Get ön kontrol isteği tetiklemeyen kategoriye ait oldukları için istekler çalışır. Süre senin Post istek muhtemelen kategoriden kaldıran bir başlık kullanıyor ve bu nedenle ön kontrolün geçmesini gerektiriyor. Daha fazla bilgi edinmek istiyorsanız, dokümantasyon bağlantısı aşağıdadır.

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Simple_requests

Şimdi, yorumunuza göre, aldığınız hata

Ön kontrol isteğine verilen yanıt erişim kontrolü denetimini geçmiyor: İstenen kaynakta 'Erişim-Denetim-İzin Verme Başlığı' başlığı yok.

Yorumda belirttiğiniz gibi üstbilgileri ayarlamak için kullandığınız yöntem, geri kalan istekler üzerinde çalışmaz. Aşağıdaki işlevi kullanabilirsiniz. functions.php veya başlangıç noktasını ayarlamak için bir eklenti dosyası * .

function sr_rest_send_cors_headers( $value ) 
{   
    header( 'Access-Control-Allow-Origin: *' );
    header( 'Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, PATCH, DELETE' );
    header( 'Access-Control-Allow-Credentials: true' );
    header( 'Vary: Origin', false );

    return $value;
}
add_filter( 'rest_pre_serve_request', 'sr_rest_send_cors_headers', 11 );

Her ne kadar varsayılan olarak WordPress ne yapar öneririz. Kontrol edersen wp-includes/rest-api.php amacınız için değiştirdiğim orijinal işlevi bulacaksınız. Bir göz atmakla ilgileniyorsanız, trac linki.

https://core.trac.wordpress.org/browser/tags/5.4/src/wp-includes/rest-api.php#L574

Cevap 17/05/2020 saat 10:38
kaynak kullanıcı

oy
0

URL'nizden kaldırmanız gereken sorununuzu buldum wp ve işe yaramalı. Örneğin:

https://example.com/wp/wp-json/game/countries

Olmalı:

https://example.com/wp-json/game/countries

Ayrıca bu öğreticiyi kontrol edebilirsiniz. Umarım size yardımcı olur.

Cevap 14/05/2020 saat 09:23
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more