Istunnot ovat suosittu käyttäjien todentamisvaihtoehto verkossa. Istunto on ajanjakso, jonka aikana käyttäjä on aktiivisesti vuorovaikutuksessa sovelluksen kanssa. Istunnon kesto alkaa, kun käyttäjä kirjautuu sisään, ja päättyy, kun hän kirjautuu ulos.

HTTP on tilaton protokolla, joten sinun on usein seurattava käyttäjien toimintaa manuaalisesti.

Sovelluksesi palvelinpuolella voit luoda ainutlaatuisen arvon, mieluiten kryptografisesti suojatun. Voit sitten tallentaa sen evästeeseen, jonka asiakas lähettää sovelluksellesi tulevien pyyntöjen yhteydessä ja luo tilamuodon.

Istunnot Gossa

Voit käyttää net/http-pakettia istuntojen toteuttamiseen, ja saatavilla on monia paketteja, jotka jo tekevät tämän. Suosituin on Gorilla sessions -paketti. Tämä paketti tarjoaa eväste- ja tiedostotallennustoiminnot mukautetun istunnon taustainfrastruktuurin ohella.

Asenna Gorilla sessions -paketti suorittamalla tämä komento Go-työtilassa.

mennä hanki github.com/gorilla/sessions

Tässä opetusohjelmassa käytät evästesäilöä istuntoihin. Net/http-paketin avulla käynnistät verkkopalvelimen, joka tarkistaa käyttäjän ongelman ja peruuttaa istunnot.

Tässä on luettelo tuonnista, jotka sinun on noudatettava tätä opetusohjelmaa.

tuonti (
"github.com/gorilla/sessions"
"Hirsi"
"net/http"
)

The Hirsi paketti on tarkoitettu kirjaamiseen liittyviin toimintoihin, jotka perustuvat käyttäjän todennuksen tilaan.

Yksinkertainen evästekaupan toteutus

Tarvitset evästekaupan kirjautumis- ja uloskirjautumiskäsittelytoimintojasi varten. Tarvitset evästesäilöäsi varten salaisen avaimen todennusta varten.

Tässä on toiminto evästesäilön toteuttamiseen.

// cookieStore-toiminto luo evästesäilön käyttäjän salaisella avaimella
funcevästekauppa() *istuntoja.CookieStore {
Salainen avain := []tavu("super-secret-SecretKey")
cookieStore := istunnot. NewCookieStore (SecretKey)

//-funktio palauttaa evästesäilön, jotta muut toiminnot voivat käyttää sitä
palata evästekauppa
}

Vuonna evästekauppa funktio, ilmoitettu salaisen avaimen muuttuja Salainen avain on esimerkki salainen avain. Tuotannossa salaisen avaimesi tulee olla kryptografisesti suojattu esimerkiksi kryptopakettia käyttämällä. Sinun tulisi myös ladata salaisuus kohteesta ympäristömuuttujatiedosto.

Funktio palauttaa arvon *istunnot. CookieStore tyyppi, joka edustaa salaisella avaimella suojattua evästevarastoa. Tulet käyttämään CookieStore toimii sinun Kirjaudu sisään ja kirjautua ulos käsittelijät käyttäjien todentamiseksi ja istuntojen määrittämiseksi.

Kirjautumisen käsittelijätoiminto

Sinun kannattaa varmistaa, onko käyttäjä jo kirjautunut sisään ennen istunnon luomista kirjautumisen käsittelijätoiminnossa. Voit käyttää Saada menetelmä evästesäilössä noutaaksesi istunnon evästeestä ja lisätäksesi istunnon asiakkaan pyyntöön.

The Saada menetelmä palauttaa istunnon ja virheen, jonka voit käsitellä. Jos sinun täytyy todentaa käyttäjä, voit todentaa tai valtuuttaa osoitteessa Kirjaudu sisään käsittelijä.

// kirjautumisen käsittelijä hakee istunnon evästekaupasta
funcKirjaudu sisään(kirjoittaja http. ResponseWriter, pyydä *http. Pyyntö) {
session, err := cookieStore().Get (pyyntö, "Evästeen nimi pyynnöstä")

jos virhe! = nolla {
Hirsi. Fatalln (err)
}

// aseta käyttäjän todennus tähän toiminnon perusteella
istunto. Arvot["todennustila"] = totta
err = istunto. Tallenna (pyyntö, kirjoittaja)

jos virhe! = nolla {
palata
}
}

Arvot-ominaisuus sisältää istuntoon liittyvät tiedot evästesäilössä:

The Tallentaa menetelmä tallentaa istunnon evästesäilöön. Käsittelijöissäsi tarvitset muita todennusmenetelmiä turvallisuuden parantamiseksi.

Käyttäjän kirjautumistilan tarkistaminen

Vahvistuksen käsittelijän tulee noutaa istunto asiakkaan evästeestä evästesäilön avulla Saada menetelmä. Sitten voit noutaa istunnon ja todentaa käyttäjän.

functarkistaAuthStatus(kirjoittaja http. ResponseWriter, pyydä *http. Pyyntö) {
session, err := cookieStore().Get (pyyntö, "Evästeen nimi pyynnöstä")

jos virhe! = nolla {
Hirsi. Fatalln (err)
}

todennettu := istunto. Arvot["todennustila"]

jos todennettu == totta {
kirjailija. WriteHeader (http. Tila OK) // Kirjoita 200 tilakoodi
palata
} muu {
kirjailija. WriteHeader (http. StatusBadRequest) // Kirjoita 400 http-tilakoodi
palata
}
}

The todennettu muuttuja käyttää Arvot ominaisuus hakeaksesi tilan evästesäilöstä. If-käsky vahvistaa tämän todennustilan. Jos se arvioi totta, asiakas saa 200 HTTP-tilakoodi. Jos todennustila ei ole tosi, asiakas saa 400 HTTP-tilakoodin.

Istunnon uloskirjautumisen käsittelijä

Kirjautumiskäsittelijätoimintosi on hyvin samanlainen kuin sisäänkirjautumisen käsittelijätoiminto. Poistat kaikki käyttäjän istuntoon liittyvät tiedot evästesäilöstä ja mitätöit todennustilan.

funckirjautua ulos(kirjoittaja http. ResponseWriter, pyydä *http. Pyyntö) {
session, err := cookieStore().Get (pyyntö, "Evästeen nimi pyynnöstä")

jos virhe! = nolla {
palata
}

// mitätöi käyttäjän istunnon evästekaupassa
istunto. Arvot["todennustila"] = väärä
err = istunto. Tallenna (pyyntö, kirjoittaja)

jos virhe! = nolla {
palata
}
}

The kirjautua ulos Käsittelijätoiminto mitätöi käyttäjän istunnon todennustilan ja tallentaa tilan evästesäilöön.

Älä tallenna arkaluonteisia tietoja istuntoihin

Istunnot sopivat erinomaisesti tietojen tallentamiseen, mutta on parasta välttää arkaluonteisten tietojen tallentamista niihin. Hyökkääjä voi kaapata istunnon, jos tallennat sen tiedot evästeeseen ja lähetät ne tavallisen HTTP: n kautta. Sovelluksesi turvallisuus on tärkeää käyttäjillesi.

Istunnot ovat tilallisia, ja Gorilla-paketin evästevarastoista on useita tietokantatoteutuksia sekä SQL- että NoSQL-tietokantoja varten.