Seansai yra populiari naudotojo autentifikavimo visame žiniatinklyje parinktis. Sesija yra laikotarpis, per kurį vartotojas aktyviai dalyvauja programoje. Seanso trukmė prasideda vartotojui prisijungus ir baigiasi atsijungus.

HTTP yra protokolas be būsenos, todėl dažnai turėsite sekti vartotojo veiklą rankiniu būdu.

Programos serverio pusėje galite sugeneruoti unikalią vertę, pageidautina kriptografiškai saugią. Tada galite išsaugoti tai slapuke, kurį klientas siųs į jūsų programą ateityje pateikdamas užklausas, sukurdamas būsenos formą.

Seansai Go

Seansams įgyvendinti galite naudoti paketą net/http, ir yra daug galimų paketų, kurie tai jau daro. Populiariausias yra „Gorilla“ seansų paketas. Šis paketas suteikia slapukų ir failų saugojimo funkciją kartu su pasirinktine seanso fono infrastruktūra.

Vykdykite šią komandą „Go“ darbo srityje, kad įdiegtumėte „Gorilla sessions“ paketą.

eik Gaukite github.com/gorilla/sessions

Šioje pamokoje seansams naudosite slapukų saugyklą. Norėdami paleisti žiniatinklio serverį, kuris patikrins vartotojo problemą ir atšauks seansus, naudosite paketą „net/http“.

instagram viewer

Štai sąrašas importuojamų dalykų, kurių turėsite vadovautis šia mokymo programa.

importuoti (
„github.com/gorilla/sessions“
"rąstas"
"net/http"
)

The žurnalas paketas skirtas su registravimu susijusioms operacijoms, pagrįstoms vartotojo autentifikavimo būsena.

Paprastas slapukų parduotuvės įgyvendinimas

Prisijungimo ir atsijungimo tvarkyklės funkcijoms atlikti reikės slapukų parduotuvės. Slapukų saugykloje jums reikės slapto rakto autentifikavimui.

Čia yra slapukų saugyklos diegimo funkcija.

// CookieStore funkcija sukuria slapukų saugyklą su slaptu vartotojo raktu
funcslapukų parduotuvė() *seansus.CookieStore {
Secret Key := []baitas("super-secret-SecretKey")
cookieStore := sesijos. NewCookieStore (SecretKey)

// funkcija grąžina slapukų saugyklą, kad kitos funkcijos galėtų ją pasiekti
grąžinti slapukų parduotuvė
}

Viduje slapukų parduotuvė funkcija, deklaruotas slaptojo rakto kintamasis Slaptas raktas yra slaptojo rakto pavyzdys. Gaminant jūsų slaptasis raktas turėtų būti kriptografiškai saugus, pavyzdžiui, naudojant kriptovaliutų paketą. Taip pat turėtumėte įkelti paslaptį iš aplinkos kintamųjų failą.

Funkcija grąžina reikšmę * sesijos. CookieStore tipas, kuris reiškia slapukų saugyklą, apsaugotą slaptuoju raktu. Jūs naudosite CookieStore funkcija jūsų Prisijungti ir Atsijungti tvarkytojai, kad autentifikuotų vartotojus ir priskirtų seansus.

Prisijungimo tvarkyklės funkcija

Prieš kurdami seansą prisijungimo tvarkyklės funkcijoje, norėsite patikrinti, ar vartotojas jau yra prisijungęs. Galite naudoti Gauk slapukų saugyklos metodą, kad gautumėte seansą iš slapuko ir įtrauktumėte seansą prie kliento užklausos.

The Gauk metodas grąžina seansą ir klaidą, kurią galite išspręsti. Jei reikia autentifikuoti vartotoją, galite jį autentifikuoti arba įgalioti Prisijungti prižiūrėtojas.

// prisijungimo tvarkyklė nuskaito seansą iš slapukų parduotuvės
funcPrisijungti(rašytojas http. ResponseWriter, užklausa *http. užklausa) {
session, err := cookieStore().Get (užklausa, "slapuko pavadinimas iš užklausos")

jeigu klysta! = nulis {
žurnalas. Fatalln (klysta)
}

// čia nustatykite vartotojo autentifikavimą pagal operaciją
sesija. Reikšmės["auth status"] = tiesa
err = sesija. Išsaugoti (užklausa, rašytojas)

jeigu klysta! = nulis {
grąžinti
}
}

Ypatybė Values ​​saugo su seansu susijusius duomenis slapukų saugykloje:

The Sutaupyti metodas išsaugo seansą slapukų saugykloje. Norėdami užtikrinti didesnį saugumą, tvarkytuvėse jums reikės kitų autentifikavimo priemonių.

Vartotojo prisijungimo būsenos patikrinimas

Jūsų patvirtinimo tvarkytojas turėtų nuskaityti seansą iš kliento slapuko, naudodamas slapukų saugyklą Gauk metodas. Tada galite nuskaityti seansą ir autentifikuoti vartotoją.

funccheckAuthStatus(rašytojas http. ResponseWriter, užklausa *http. užklausa) {
session, err := cookieStore().Get (užklausa, "slapuko pavadinimas iš užklausos")

jeigu klysta! = nulis {
žurnalas. Fatalln (klysta)
}

autentifikuota := sesija. Reikšmės["auth status"]

jeigu patvirtinta == tiesa {
rašytojas. WriteHeader (http. BūsenaGerai) // parašyti 200 būsenos kodą
grąžinti
} Kitas {
rašytojas. WriteHeader (http. StatusBadRequest) // parašyti 400 http būsenos kodą
grąžinti
}
}

The patvirtintas kintamasis naudoja Vertybės ypatybę, kad gautumėte būseną iš slapukų saugyklos. Jei sakinys tada patvirtina šią autentifikavimo būseną. Jei įvertins tiesa, klientas gauna 200 HTTP būsenos kodas. Jei autentifikavimo būsena neteisinga, klientas gauna 400 HTTP būsenos kodą.

Sesijos atsijungimo tvarkytuvas

Jūsų atsijungimo tvarkyklės funkcija bus labai panaši į prisijungimo tvarkyklės funkciją. Iš slapukų saugyklos ištrinsite visus su vartotojo seansu susijusius duomenis ir panaikinsite autentifikavimo būseną.

funcAtsijungti(rašytojas http. ResponseWriter, užklausa *http. užklausa) {
session, err := cookieStore().Get (užklausa, "slapuko pavadinimas iš užklausos")

jeigu klysta! = nulis {
grąžinti
}

// panaikinti vartotojo seansą iš slapukų parduotuvės
sesija. Reikšmės["auth status"] = klaidinga
err = sesija. Išsaugoti (užklausa, rašytojas)

jeigu klysta! = nulis {
grąžinti
}
}

The Atsijungti tvarkyklės funkcija panaikina vartotojo seanso autentifikavimo būseną ir išsaugo būseną slapukų saugykloje.

Seansuose nesaugokite jautrių duomenų

Seansai puikiai tinka duomenims saugoti, tačiau geriausia jose nesaugoti neskelbtinų duomenų. Užpuolikas gali užgrobti seansą, jei saugote jo duomenis slapuke ir siunčiate paprastu HTTP. Programos sauga yra svarbi naudotojams.

Seansai yra būsenos ir yra daug duomenų bazės įdiegtų slapukų saugyklų, skirtų Gorilla paketui, tiek SQL, tiek NoSQL duomenų bazėms.