Make WordPress Core

Ticket #40422: 40422.2.diff

File 40422.2.diff, 2.8 KB (added by adamsilverstein, 7 years ago)
  • src/wp-includes/js/wp-api.js

    diff --git a/src/wp-includes/js/wp-api.js b/src/wp-includes/js/wp-api.js
    index 3f950a4..38135cc 100644
    a b (this hunk was shorter than expected) 
    758758                                        model.unset( 'slug' );
    759759                                }
    760760
    761                                 if ( ! _.isUndefined( wpApiSettings.nonce ) && ! _.isNull( wpApiSettings.nonce ) ) {
     761                                if ( ! _.isUndefined( model.nonce() ) && ! _.isNull( model.nonce() ) ) {
    762762                                        beforeSend = options.beforeSend;
    763763
    764764                                        // @todo enable option for jsonp endpoints
    765765                                        // options.dataType = 'jsonp';
    766766
     767                                        // Include the nonce with requests.
    767768                                        options.beforeSend = function( xhr ) {
    768                                                 xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
     769                                                xhr.setRequestHeader( 'X-WP-Nonce', model.nonce() );
    769770
    770771                                                if ( beforeSend ) {
    771772                                                        return beforeSend.apply( this, arguments );
    772773                                                }
    773774                                        };
     775
     776                                        // Update the nonce when a new nonce is returned with the response.
     777                                        options.complete = function( xhr ) {
     778                                                var returnedNonce = xhr.getResponseHeader( 'X-WP-Nonce' );
     779
     780                                                if ( returnedNonce && model.nonce() !== returnedNonce ) {
     781                                                        model.endpointModel.set( 'nonce', returnedNonce );
     782                                                }
     783                                        };
    774784                                }
    775785
    776786                                // Add '?force=true' to use delete method when required.
     
    10091020                defaults: {
    10101021                        apiRoot: wpApiSettings.root,
    10111022                        versionString: wp.api.versionString,
     1023                        nonce: null,
    10121024                        schema: null,
    10131025                        models: {},
    10141026                        collections: {}
     
    10261038                        model.schemaConstructed = deferred.promise();
    10271039
    10281040                        model.schemaModel = new wp.api.models.Schema( null, {
    1029                                 apiRoot: model.get( 'apiRoot' ),
    1030                                 versionString: model.get( 'versionString' )
     1041                                apiRoot:       model.get( 'apiRoot' ),
     1042                                versionString: model.get( 'versionString' ),
     1043                                nonce:         model.get( 'nonce' )
    10311044                        } );
    10321045
    10331046                        // When the model loads, resolve the promise.
     
    11941207                                                        return url;
    11951208                                                },
    11961209
     1210                                                // Track nonces on the Endpoint 'routeModel'.
     1211                                                nonce: function() {
     1212                                                        return routeModel.get( 'nonce' );
     1213                                                },
     1214
     1215                                                endpointModel: routeModel,
     1216
    11971217                                                // Include a reference to the original route object.
    11981218                                                route: modelRoute,
    11991219
     
    12401260                                                        return url;
    12411261                                                },
    12421262
     1263                                                // Track nonces at the Endpoint level.
     1264                                                nonce: function() {
     1265                                                        return routeModel.get( 'nonce' );
     1266                                                },
     1267
     1268                                                endpointModel: routeModel,
     1269
    12431270                                                // Include a reference to the original route object.
    12441271                                                route: modelRoute,
    12451272
     
    13611388                var endpoint, attributes = {}, deferred, promise;
    13621389
    13631390                args                     = args || {};
     1391                attributes.nonce         = args.nonce || wpApiSettings.nonce || '';
    13641392                attributes.apiRoot       = args.apiRoot || wpApiSettings.root || '/wp-json';
    13651393                attributes.versionString = args.versionString || wpApiSettings.versionString || 'wp/v2/';
    13661394                attributes.schema        = args.schema || null;