Tarpinio serverio profilių perjungimas turėtų pakeisti pasirinktą paskyrą, o ne pridėti dar vieną onAuthRequired klausytoją. Priešingu atveju senos closures gali toliau atsakyti ankstesnio pasirinkimo paskyra.

Užregistruokite vieną pavadintą klausytoją viršutiniame service worker lygyje. Kai ateina įvykis, perskaitykite dabartinę paskyrą:

function answerProxyChallenge(details, reply) {
  if (!details.isProxy) {
    reply({});
    return;
  }
  chrome.storage.session.get('selectedProxy').then(({selectedProxy: p}) => {
    if (!p || details.challenger.host !== p.host ||
        details.challenger.port !== p.port) {
      reply({});
      return;
    }
    reply({authCredentials: {username: p.username, password: p.password}});
  }).catch(() => reply({cancel: true}));
}

chrome.webRequest.onAuthRequired.addListener(
  answerProxyChallenge,
  {urls: ['<all_urls>']},
  ['asyncBlocking'],
);

Šis fragmentas daro prielaidą, kad plėtinys jau saugo pasirinktą HTTP tarpinį serverį po selectedProxy, su skaitmeniniu prievadu ir numatyta paskyra. Manifestui reikia webRequest, webRequestAuthProvider, storage ir reikiamų pagrindinio kompiuterio leidimų. Pačiam tarpinio serverio pasirinkimui taip pat reikia proxy leidimo.

Registracija vyksta sinchroniškai. Saugykla skaitoma atgaliniame iškvietime, kai „Chrome“ jau turi įdiegtą klausytoją, kuriam pristatyti. Registruoti tik po to, kai išsprendžiamas pradinis storage pažadas, sukuria pabudimo spragą.

Prieš išleidžiant pridėkite atmetimo limitą

Fragmentas rodo registraciją ir paskyros pasirinkimą. Pridėkite ribotą pakartotinio bandymo įrašą kiekvienai užklausai, kad atmestas slaptažodis nebūtų siunčiamas be galo. Išvalykite tą įrašą užbaigus arba nepavykus. Worker globalai gali išnykti, kai worker sustoja, todėl tarp pabudimų reikalingą būseną laikykite tinkamoje plėtinio saugyklos srityje.

storage.session išgyvena worker perkrovimus naršyklės sesijoje; tai nėra nuolatinė paskyros saugykla tarp naršyklės perkrovimų. Apibrėžkite, ką plėtinys daro, kai nėra pasirinktos paskyros.

isProxy ir challenger patikros neleidžia nesusijusios svetainės iššūkiui gauti šios paskyros. Jei naršyklė niekada nepristato įvykio, vien klausytojo valymas negali jo sukurti: atskirai patikrinkite tikrąją užklausą, leidimus ir naršyklės elgseną.

Susiję straipsniai