programing

wp-rest api 응용 프로그램에서 wordpress nonce를 사용할 수 없습니다.

javajsp 2023. 4. 4. 20:59

wp-rest api 응용 프로그램에서 wordpress nonce를 사용할 수 없습니다.

안전한 앱을 가지고 있기 때문에 Nonce를 사용하고 있습니다만, 동작시킬 수 없습니다.몇 가지 방법을 시도해 봤는데 확인이 안 돼서 뭔가 빠진 것 같아요.

js 코드 fragment는 다음과 같습니다.

function placeNew(next){
  _nonce = $('input#_nonce').val();
  request = $.ajax({
    type: 'POST',
    url: url_path + '/foo/v1/newbee',
    data: {bid : next , _nonce : _nonce},
    security: '<?php echo wp_create_nonce( "a" ); ?>',
    dataType: 'json'
});
request.done(function (response, textStatus, jqXHR){
  str = JSON.stringify(response);
  if(response["error"]){
    alert(response["message"]);
  }

난스는 다음 코드와 함께 페이지에 추가됩니다.

$nonce = wp_create_nonce( 'a' );
echo "<input type='hidden' id='_nonce' value=" . $nonce ."/>";

php에서는 다음 함수 fragment를 사용하여 난스를 가져오고 비교합니다.

function ace($request) {
    global $wpdb;
    $timestamp = time();
    $nonce = (string) $request['_nonce'];
    $verify = check_ajax_referer( 'a', $nonce, false );
    if ( ! $verify){
        $errMsg = $nonce . '-'. $verify .' not validated ';
        return (object) array(error => true, message => $errMsg);
    }

항상 "검증되지 않았습니다"라는 메시지가 나타납니다.$nonce에는 값이 있지만 $nonce에는 값이 없습니다.

문서에 따르면:

개발자가 수동으로 Ajax 요청을 하는 경우 각 요청과 함께 난스를 전달해야 합니다.API는 wp_rest로 설정된 액션에 난스를 사용합니다.그런 다음 _wpnonce 데이터 파라미터(POST 데이터 또는 GET 요구에 대한 쿼리) 또는 X-WP-Nonce 헤더를 통해 API에 전달할 수 있습니다.

놓치는 중요한 부분은 다음과 같습니다.

API는 wp_rest로 설정된 액션에 난스를 사용합니다.

이 기능이 작동하려면 에서 액션의 이름을 지정해야 합니다.wp_create_nonce로.wp_rest.

따라서 코드에 대해 다음 인스턴스를 모두 변경해야 합니다.

wp_create_nonce( "a" )

로.

wp_create_nonce( 'wp_rest' )

또한 docs의 설명에 따르면:

난스를 헤더로 제공하는 것이 가장 신뢰할 수 있는 접근법입니다.

따라서 이를 Ajax에 추가하는 것은 간단하며 다음과 같습니다.

var _nonce = "<?php echo wp_create_nonce( 'wp_rest' ); ?>";
$.ajax({
    type: 'POST',
    url: url_path + '/foo/v1/newbee',
    data: {
        bid : next
    },
    dataType: 'json',
    beforeSend: function ( xhr ) {
        xhr.setRequestHeader( 'X-WP-Nonce', _nonce );
    }
});

또한 수표를 수정하기 위해

check_ajax_referer( 'a', $nonce, false )

지금 당장

check_ajax_referer( 'wp_rest', '_nonce', false )

언급URL : https://stackoverflow.com/questions/42179869/not-getting-wordpress-nonce-to-work-with-wp-rest-api-application