Skip to content

Instantly share code, notes, and snippets.

@emyasnikov
Last active July 24, 2019 10:31
Show Gist options
  • Save emyasnikov/1f3812e3c153d3b7dd50d47664b816c2 to your computer and use it in GitHub Desktop.
Save emyasnikov/1f3812e3c153d3b7dd50d47664b816c2 to your computer and use it in GitHub Desktop.
Requests Drupal 7 Services token automatically, saves it to local storage and allows to use jQuery.request() function without to worry about whether token is still valide or has to be requested again.
(function ($) {
var token, request = null;
$.token = function () {
return $.get("/services/session/token").done(function (data) {
localStorage.setItem("X-CSRF-Token", data);
token = data;
});
};
$.request = function (settings, deferred) {
var response = deferred || $.Deferred();
settings = $.extend(settings || {}, {
complete: function (xhr, status) {
switch (xhr.status) {
case 200:
response.resolve($.parseJSON(xhr.responseText));
break;
case 401:
if (!request) request = $.token();
request.done(function () {
$.request(settings, response).fail(response.reject);
request = null;
});
break;
default: response.reject(xhr.status);
}
},
headers: $.extend(settings.headers || {}, {
"X-CSRF-Token": token
}),
type: settings.type || "post"
})
$.ajax(settings);
return response;
};
token = localStorage.getItem("X-CSRF-Token");
if (!token) $.token();
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment