Sesijas ir populāra lietotāju autentifikācijas iespēja tīmeklī. Sesija ir periods, kurā lietotājs aktīvi iesaistās lietojumprogrammā. Sesijas ilgums sākas, kad lietotājs piesakās, un beidzas, kad viņš atsakās.

HTTP ir bezvalsts protokols, tāpēc jums bieži būs manuāli jāseko lietotāja darbībām.

Lietojumprogrammas servera pusē varat ģenerēt unikālu vērtību, vēlams kriptogrāfiski drošu. Pēc tam varat to saglabāt sīkfailā, ko klients turpmākajos pieprasījumos nosūtīs jūsu lietotnei, izveidojot statusa formu.

Sesijas pakalpojumā Go

Sesiju ieviešanai varat izmantot net/http pakotni, un ir pieejamas daudzas pakotnes, kas to jau dara. Vispopulārākā ir Gorilla sesiju pakotne. Šī pakotne nodrošina sīkfailu un failu glabāšanas funkcionalitāti kopā ar pielāgotu sesijas aizmugursistēmas infrastruktūru.

Palaidiet šo komandu savā Go darbvietā, lai instalētu Gorilla sesiju pakotni.

aiziet iegūstiet vietni github.com/gorilla/sessions

Šajā apmācībā sesijām izmantosit sīkfailu krātuvi. Jūs izmantosiet pakotni net/http, lai palaistu tīmekļa serveri, kas pārbaudīs lietotāja problēmu un atsauks sesijas.

instagram viewer

Šeit ir saraksts ar importētajām precēm, kas jums būs nepieciešamas, lai sekotu šai apmācībai.

imports (
"github.com/gorilla/sessions"
"baļķis"
"net/http"
)

The žurnāls pakotne ir paredzēta ar reģistrēšanu saistītām darbībām, pamatojoties uz lietotāja autentifikācijas statusu.

Vienkārša sīkfailu veikala ieviešana

Pieteikšanās un atteikšanās apstrādātāja funkcijām būs nepieciešams sīkfailu veikals. Jūsu sīkfailu veikalam autentifikācijai būs nepieciešama slepenā atslēga.

Šeit ir sīkfailu veikala ieviešanas funkcija.

// CookieStore funkcija izveido sīkfailu krātuvi ar lietotāja slepeno atslēgu
funccookieStore() *sesijas.CookieStore {
SecretKey := []baits("super-secret-SecretKey")
cookieStore := sesijas. NewCookieStore (SecretKey)

// funkcija atgriež sīkfailu krātuvi, lai citas funkcijas varētu tai piekļūt
atgriezties cookieStore
}

Iekš cookieStore funkcija, deklarētā slepenās atslēgas mainīgais SecretKey ir slepenās atslēgas piemērs. Ražošanā jūsu slepenajai atslēgai ir jābūt kriptogrāfiski drošai, piemēram, izmantojot kriptogrāfijas pakotni. Jums vajadzētu arī ielādēt noslēpumu no vides mainīgo failu.

Funkcija atgriež vērtību *sesijas. CookieStore tips, kas apzīmē ar slepeno atslēgu aizsargāto sīkfailu krātuvi. Jūs izmantosit CookieStore funkcija jūsu Pieslēgties un izlogoties apstrādātājus, lai autentificētu lietotājus un piešķirtu sesijas.

Pieteikšanās apstrādātāja funkcija

Pirms sesijas izveides pieteikšanās apdarinātāja funkcijā vēlēsities pārbaudīt, vai lietotājs jau ir pieteicies. Jūs varat izmantot gūt metodi sīkfailu krātuvē, lai izgūtu sesiju no sīkfaila un pievienotu sesiju klienta pieprasījumam.

The gūt metode atgriež sesiju un kļūdu, kuru varat novērst. Ja jums ir jāautentificē lietotājs, varat to autentificēt vai autorizēt vietnē Pieslēgties apdarinātājs.

// pieteikšanās apstrādātājs izgūst sesiju no sīkfailu veikala
funcPieslēgties(rakstnieks http. ResponseWriter, pieprasiet *http. Pieprasīt) {
session, err := cookieStore().Get (pieprasījums, "Sīkfaila nosaukums no pieprasījuma")

ja kļūda! = nulle {
žurnāls. Fatalln (kļūda)
}

// šeit iestatiet lietotāja autentifikāciju, pamatojoties uz darbību
sesija. Vērtības["auth status"] = taisnība
err = sesija. Saglabāt (pieprasījums, rakstnieks)

ja kļūda! = nulle {
atgriezties
}
}

Rekvizīts Values ​​glabā ar sesiju saistītos datus sīkfailu krātuvē:

The Saglabāt metode saglabā sesiju sīkfailu krātuvē. Apdarinātājos jums būs nepieciešami citi autentifikācijas pasākumi, lai nodrošinātu lielāku drošību.

Lietotāja pieteikšanās statusa pārbaude

Jūsu verifikācijas apstrādātājam ir jāizgūst sesija no klienta sīkfaila, izmantojot sīkfailu krātuves gūt metodi. Pēc tam varat izgūt sesiju un autentificēt lietotāju.

funcpārbaudietAuthStatus(rakstnieks http. ResponseWriter, pieprasiet *http. Pieprasīt) {
session, err := cookieStore().Get (pieprasījums, "Sīkfaila nosaukums no pieprasījuma")

ja kļūda! = nulle {
žurnāls. Fatalln (kļūda)
}

autentificēts := sesija. Vērtības["auth status"]

ja autentificēts == taisnība {
rakstnieks. WriteHeader (http. Statuss OK) // rakstiet 200 statusa kodu
atgriezties
} cits {
rakstnieks. WriteHeader (http. StatusBadRequest) // rakstiet 400 http statusa kodu
atgriezties
}
}

The autentificēts mainīgais izmanto Vērtības rekvizītu, lai izgūtu statusu no sīkfailu krātuves. Paziņojums if pēc tam pārbauda šo autentifikācijas statusu. Ja tā vērtē taisnība, klients saņem 200 HTTP statusa kods. Ja autentifikācijas statuss nav patiess, klients saņem 400 HTTP statusa kodu.

Sesijas atteikšanās apdarinātājs

Jūsu atteikšanās apdarinātāja funkcija būs ļoti līdzīga pieteikšanās apdarinātāja funkcijai. Jūs dzēsīsiet visus datus, kas saistīti ar lietotāja sesiju, no sīkfailu krātuves un anulēsiet autentifikācijas statusu.

funcizlogoties(rakstnieks http. ResponseWriter, pieprasiet *http. Pieprasīt) {
session, err := cookieStore().Get (pieprasījums, "Sīkfaila nosaukums no pieprasījuma")

ja kļūda! = nulle {
atgriezties
}

// anulēt lietotāja sesiju no sīkfailu veikala
sesija. Vērtības["auth status"] = viltus
err = sesija. Saglabāt (pieprasījums, rakstnieks)

ja kļūda! = nulle {
atgriezties
}
}

The izlogoties apstrādātāja funkcija anulē lietotāja sesijas autentifikācijas statusu un saglabā statusu sīkfailu krātuvē.

Neglabājiet sensitīvus datus sesijās

Sesijas ir lieliski piemērotas datu glabāšanai, taču vislabāk ir izvairīties no sensitīvu datu glabāšanas tajās. Uzbrucējs var nolaupīt sesiju, ja saglabājat tās datus sīkfailā un nosūtāt, izmantojot vienkāršu HTTP. Jūsu lietotnes drošība ir svarīga jūsu lietotājiem.

Sesijas ir statusa, un ir daudz datu bāzu ieviešanas sīkfailu krātuves Gorilla pakotnei gan SQL, gan NoSQL datu bāzēm.