Seansid on populaarne valik kasutajate autentimiseks kogu veebis. Seanss on periood, mille jooksul kasutaja kasutab rakendust aktiivselt. Seansi eluiga algab kasutaja sisselogimisest ja lõpeb väljalogimisega.

HTTP on olekuta protokoll, mistõttu peate sageli kasutaja tegevust käsitsi jälgima.

Rakenduse serveri poolel saate luua kordumatu väärtuse, eelistatavalt krüptograafiliselt turvalise väärtuse. Seejärel saate selle salvestada küpsisesse, mille klient saadab teie rakendusele tulevaste päringute korral, luues olekuvormi.

Seansid Go's

Seansside juurutamiseks saate kasutada paketti net/http ja saadaval on palju pakette, mis seda juba teevad. Kõige populaarsem on Gorilla seansside pakett. See pakett pakub küpsiste ja failide salvestamise funktsioone koos kohandatud seansi taustainfrastruktuuriga.

Käivitage see käsk oma Go tööalal, et installida Gorilla seansside pakett.

mine hankige github.com/gorilla/sessions

Selles õpetuses kasutate seansside jaoks küpsiste salvestamist. Kasutate paketti net/http, et käivitada veebiserver, mis kontrollib kasutaja probleemi ja tühistab seansid.

Siin on importimiste loend, mida peate selle õpetuse järgimiseks järgima.

importida (
"github.com/gorilla/sessions"
"logi"
"net/http"
)

The logi pakett on mõeldud logimisega seotud toimingute jaoks, mis põhinevad kasutaja autentimise olekul.

Lihtne küpsistepoe juurutamine

Sisselogimis- ja väljalogimishalduri funktsioonide jaoks vajate küpsiste salvestamist. Küpsiste poe jaoks vajate autentimiseks salajast võtit.

Siin on küpsiste salvestamise funktsioon.

// CookieStore funktsioon loob kasutaja salajase võtmega küpsiste poe
funccookie Store() *istungid.CookieStore {
Salavõti := []bait("super-secret-SecretKey")
cookieStore := seansid. NewCookieStore (SecretKey)

// funktsioon tagastab küpsiste salvestamise, et teised funktsioonid saaksid sellele juurde pääseda
tagasi cookie Store
}

Aastal cookie Store funktsioon, deklareeritud salajase võtme muutuja Salavõti on salajase võtme näide. Tootmises peaks teie salavõti olema krüptograafiliselt turvaline, kasutades näiteks krüptopaketti. Samuti peaksite laadima saladuse aadressilt keskkonnamuutujate fail.

Funktsioon tagastab väärtuse *seansid. CookieStore tüüp, mis tähistab salajase võtmega kaitstud küpsiste salvestamist. Sa kasutad CookieStore funktsioon sinus Logi sisse ja Logi välja töötlejad kasutajate autentimiseks ja seansside määramiseks.

Sisselogimishalduri funktsioon

Enne sisselogimishalduri funktsioonis seansi loomist soovite kontrollida, kas kasutaja on juba sisse logitud. Võite kasutada Hangi küpsiste salvestamise meetod, et hankida küpsisest seanss ja lisada seanss kliendi päringule.

The Hangi meetod tagastab seansi ja vea, mida saate käsitleda. Kui teil on vaja kasutajat autentida, saate autentida või autoriseerida rakenduses Logi sisse käitleja.

// sisselogimise töötleja hangib seansi küpsiste poest
funcLogi sisse(kirjanik http. ResponseWriter, päring *http. taotlus) {
session, err := cookieStore().Get (päring, "küpsise nimi päringust")

kui eks!= null {
logi. Fatalln (viga)
}

// määrake siin oma kasutaja autentimine toimingu põhjal
istungil. Väärtused["autentimise olek"] = tõsi
err = seanss. Salvesta (taotlus, kirjutaja)

kui eks!= null {
tagasi
}
}

Atribuut Values ​​hoiab küpsisesalves seansiga seotud andmeid:

The Salvesta meetod salvestab seansi küpsiste hoidlasse. Oma töötlejates vajate suurema turvalisuse tagamiseks muid autentimismeetmeid.

Kasutaja sisselogimise oleku kontrollimine

Teie kinnitustöötleja peaks tooma seansi kliendi küpsisest, kasutades küpsisesalve Hangi meetod. Seejärel saate seansi alla laadida ja kasutaja autentida.

funckontrolli AuthStatus(kirjanik http. ResponseWriter, päring *http. taotlus) {
session, err := cookieStore().Get (päring, "küpsise nimi päringust")

kui eks!= null {
logi. Fatalln (viga)
}

autentitud := seanss. Väärtused["auth status"]

kui autentitud == tõsi {
kirjanik. WriteHeader (http. Olek OK) // kirjutage olekukood 200
tagasi
} muidu {
kirjanik. WriteHeader (http. StatusBadRequest) // kirjutage 400 http olekukood
tagasi
}
}

The autentitud muutuja kasutab Väärtused atribuut oleku hankimiseks küpsisesalvest. Seejärel kinnitab if-lause seda autentimise olekut. Kui see hindab tõsi, saab klient 200 HTTP olekukood. Kui autentimise olek ei ole tõene, saab klient 400 HTTP olekukoodi.

Seansi väljalogimise töötleja

Teie väljalogimise töötleja funktsioon on väga sarnane sisselogimise töötleja funktsiooniga. Kustutate küpsisesalvest kõik kasutaja seansiga seotud andmed ja tühistate autentimise oleku.

funcLogi välja(kirjanik http. ResponseWriter, päring *http. taotlus) {
session, err := cookieStore().Get (päring, "küpsise nimi päringust")

kui eks!= null {
tagasi
}

// tühistab küpsiste poest kasutaja seansi
istungil. Väärtused["autentimise olek"] = vale
err = seanss. Salvesta (taotlus, kirjutaja)

kui eks!= null {
tagasi
}
}

The Logi välja käitleja funktsioon tühistab kasutaja seansi autentimise oleku ja salvestab oleku küpsistesalve.

Ärge salvestage seansidesse tundlikke andmeid

Seansid sobivad suurepäraselt andmete salvestamiseks, kuid kõige parem on vältida tundlike andmete talletamist. Ründaja võib seansi kaaperdada, kui salvestate selle andmed küpsisesse ja saadate need tavalise HTTP kaudu. Teie rakenduse turvalisus on teie kasutajate jaoks oluline.

Seansid on olekupõhised ja nii SQL-i kui ka NoSQL-i andmebaaside jaoks on Gorilla paketi küpsisesalvede jaoks palju andmebaasirakendusi.