Kaip žetonas patenka į kiekvieną užklausą
8a pamokoje išsaugojom sesijos žetoną, bet jo dar niekur nesiuntėm. Dabar — 4 kontrakto žingsnis: prisegti žetoną prie kiekvienos apsaugotos užklausos.
Serveris apsaugotą endpoint'ą (pvz., GET /orders) tikrina pagal HTTP antraštę:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Būdas „bloga" — kiekvienoje repozitorijoje ranka pridėti šią antraštę. Tada apie autentifikaciją turi galvoti kiekvienas kodo gabalas, ir vieną kur nors pamirši.
Būdas „gerai" — vienas OkHttp interceptorius. Interceptorius — tai filtras, per kurį eina kiekviena išeinanti užklausa. Jame vieną kartą prisegam žetoną, ir visa kita programa apie tai net nežino:
Repozitorija ──▶ Retrofit ──▶ OkHttp ──[AuthInterceptor prideda žetoną]──▶ serveris
Du dalykai, kuriuos interceptorius privalo tvarkyti:
- Vieši keliai.
/loginir/registerNEGALI turėti žetono — jungiantis jo dar nėra. Interceptorius juos praleidžia. - 401 (Unauthorized). Jei žetonas pasibaigęs ar blogas, serveris grąžina 401. Tada vartotoją reikia grąžinti į prisijungimą.
Šioje pamokoje: AuthInterceptor prisega žetoną, coreModule gauna tikrą OkHttpClient, ir pagaliau atsiranda užsakymai — POST /orders (pateikti) ir GET /orders (istorija). Serveris pagal žetoną žino, kieno tai užsakymai, tad kiekvienas mato tik savus.