WordPress.org

Make WordPress Core

Changeset 42851


Ignore:
Timestamp:
03/18/2018 05:03:20 PM (2 months ago)
Author:
ocean90
Message:

REST API JS Client: Extend custom nonce functionality to collections.

This brings the improved nonce handling from [41553] to collections to remove the direct wpApiSettings.nonce dependency.

Props adamsilverstein, ocean90, swissspidy.
Fixes #43265.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/js/wp-api.js

    r42403 r42851  
    991991                    self = this;
    992992
    993                 options    = options || {};
    994                 beforeSend = options.beforeSend;
    995 
    996                 // If we have a localized nonce, pass that along with each sync.
    997                 if ( 'undefined' !== typeof wpApiSettings.nonce ) {
     993                options = options || {};
     994
     995                if ( _.isFunction( model.nonce ) && ! _.isUndefined( model.nonce() ) && ! _.isNull( model.nonce() ) ) {
     996                    beforeSend = options.beforeSend;
     997
     998                    // Include the nonce with requests.
    998999                    options.beforeSend = function( xhr ) {
    999                         xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
     1000                        xhr.setRequestHeader( 'X-WP-Nonce', model.nonce() );
    10001001
    10011002                        if ( beforeSend ) {
    10021003                            return beforeSend.apply( self, arguments );
     1004                        }
     1005                    };
     1006
     1007                    // Update the nonce when a new nonce is returned with the response.
     1008                    options.complete = function( xhr ) {
     1009                        var returnedNonce = xhr.getResponseHeader( 'X-WP-Nonce' );
     1010
     1011                        if ( returnedNonce && _.isFunction( model.nonce ) && model.nonce() !== returnedNonce ) {
     1012                            model.endpointModel.set( 'nonce', returnedNonce );
    10031013                        }
    10041014                    };
     
    14061416                        },
    14071417
     1418                        // Track nonces at the Endpoint level.
     1419                        nonce: function() {
     1420                            return routeModel.get( 'nonce' );
     1421                        },
     1422
     1423                        endpointModel: routeModel,
     1424
    14081425                        // Include a reference to the original class name.
    14091426                        name: collectionClassName,
     
    14321449                            return new loadingObjects.models[ modelClassName ]( attrs, options );
    14331450                        },
     1451
     1452                        // Track nonces at the Endpoint level.
     1453                        nonce: function() {
     1454                            return routeModel.get( 'nonce' );
     1455                        },
     1456
     1457                        endpointModel: routeModel,
    14341458
    14351459                        // Include a reference to the original class name.
Note: See TracChangeset for help on using the changeset viewer.