আমি বিভিন্ন জেএস লাইব্রেরি (অ্যাঙ্গুলারজেএস, ওপেনলায়ার্স, ...) দিয়ে একটি ওয়েব অ্যাপ তৈরি করছি এবং লগ-ইন ব্যবহারকারীর সেশনটির মেয়াদ শেষ হয়ে গেলে (প্রতিক্রিয়াটি 401 Unauthorized
স্ট্যাটাসের সাথে ফিরে আসে ), তাকে পুনঃনির্দেশ করার জন্য , সমস্ত এজেএক্স প্রতিক্রিয়াগুলি সক্ষম হওয়ার জন্য একটি উপায়ের প্রয়োজন লগইন পৃষ্ঠায়।
আমি জানি অ্যাংুলারজেএস এই interceptors
জাতীয় পরিস্থিতি পরিচালনা করার প্রস্তাব দেয় তবে ওপেনলায়ার্স অনুরোধগুলিতে এই জাতীয় ইনজেকশন অর্জনের কোনও উপায় খুঁজে পেল না। সুতরাং আমি একটি ভ্যানিলা জেএস পদ্ধতির পক্ষে বেছে নিয়েছি।
এখানে আমি কোডটির এই অংশটি পেয়েছি ...
(function(open) {
XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
this.addEventListener("readystatechange", function() {
console.log(this.readyState); // this one I changed
}, false);
open.call(this, method, url, async, user, pass);
};
})(XMLHttpRequest.prototype.open);
... যা আমি রূপান্তর করেছি এবং দেখে মনে হচ্ছে এটি প্রত্যাশার সাথে আচরণ করে (এটি কেবলমাত্র শেষ গুগল ক্রোমে পরীক্ষিত)।
এটি এক্সএমএলএইচটিপিআরকিউস্টের প্রোটোটাইপটি সংশোধন করার সাথে সাথে আমি ভাবছি যে এটি কতটা বিপজ্জনক হতে পারে বা এটি যদি গুরুতর পারফরম্যান্সের সমস্যা তৈরি করতে পারে। এবং উপায় দ্বারা কোনও বৈধ বিকল্প আছে?
আপডেট: কীভাবে অনুরোধগুলি প্রেরণের আগে তাদেরকে আটকানো যায়
আগের কৌশলটি ঠিকঠাক কাজ করে। তবে যদি একই পরিস্থিতিতে আপনি অনুরোধটি প্রেরণের আগে কিছু শিরোনাম ইনজেকশন করতে চান? নিম্নলিখিতগুলি করুন:
(function(send) {
XMLHttpRequest.prototype.send = function(data) {
// in this case I'm injecting an access token (eg. accessToken) in the request headers before it gets sent
if(accessToken) this.setRequestHeader('x-access-token', accessToken);
send.call(this, data);
};
})(XMLHttpRequest.prototype.send);