Oturumlar, web genelinde kullanıcı kimlik doğrulaması için popüler bir seçenektir. Oturum, kullanıcının bir uygulamayla aktif olarak etkileşimde bulunduğu bir dönemdir. Bir oturumun ömrü, bir kullanıcı oturum açtığında başlar ve oturumu kapattığında sona erer.

HTTP durumsuz bir protokoldür, bu nedenle genellikle kullanıcı etkinliğini manuel olarak izlemeniz gerekir.

Uygulamanızın sunucu tarafında, benzersiz bir değer, tercihen kriptografik olarak güvenli bir değer oluşturabilirsiniz. Daha sonra bunu, müşterinin gelecekteki isteklerde uygulamanıza göndereceği bir çerezde saklayabilir ve bir durum formu oluşturabilirsiniz.

Go'daki Oturumlar

Oturumları uygulamak için net/http paketini kullanabilirsiniz ve bunu zaten yapan birçok kullanılabilir paket vardır. En popüler olanı Gorilla oturumları paketidir. Bu paket, özel oturum arka uç altyapısının yanı sıra tanımlama bilgisi ve dosya depolama işlevi sağlar.

Gorilla session paketini kurmak için Go çalışma alanınızda bu komutu çalıştırın.

Git github.com/gorilla/sessions'ı edinin
instagram viewer

Bu öğreticide, oturumlar için bir çerez deposu kullanacaksınız. Kullanıcının sorununu kontrol edecek ve oturumları iptal edecek bir web sunucusu başlatmak için net/http paketini kullanacaksınız.

İşte bu öğreticiyi izlemeniz gereken ithalat listesi.

içe aktarmak (
"github.com/gorilla/sessions"
"kayıt"
"net/http"
)

bu kayıt paketi, kullanıcının kimlik doğrulamasının durumuna göre günlüğe kaydetme ile ilgili işlemler içindir.

Basit Bir Çerez Mağazası Uygulaması

Oturum açma ve oturum kapatma işleyici işlevleriniz için bir çerez deposuna ihtiyacınız olacak. Çerez deponuz için kimlik doğrulama için bir gizli anahtara ihtiyacınız olacak.

İşte çerez deposu uygulaması için bir fonksiyon.

// cookieStore işlevi, kullanıcının gizli anahtarıyla bir çerez deposu oluşturur
işlevçerezMağaza() *oturumlar.Kurabiye Mağazası {
Gizli Anahtar := []bayt("süper gizli-SecretKey")
cookieStore := oturumlar. NewCookieStore (SecretKey)

// işlev, diğer işlevlerin erişebilmesi için çerez deposunu döndürür
dönüş çerezMağaza
}

İçinde çerezMağaza işlev, bildirilen gizli anahtar değişkeni Gizli anahtar örnek bir gizli anahtardır. Üretimde, örneğin kripto paketini kullanarak gizli anahtarınız kriptografik olarak güvenli olmalıdır. Sırrı şuradan da yüklemelisiniz: bir ortam değişkenleri dosyası.

İşlev, bir değer döndürür *oturumlar. Kurabiye Mağazası gizli anahtarla korunan çerez deposunu temsil eden tür. kullanacaksın Kurabiye Mağazası senin içinde işlev giriş yapmak ve çıkış Yap Kullanıcıların kimliğini doğrulamak ve oturumları atamak için işleyiciler.

Oturum Açma İşleyicisi İşlevi

Oturum açma işleyici işlevinizde bir oturum oluşturmadan önce kullanıcının oturum açmış olup olmadığını doğrulamak isteyeceksiniz. kullanabilirsiniz Almak Tanımlama bilgisinden bir oturum almak ve oturumu müşterinin isteğine eklemek için tanımlama bilgisi deposundaki yöntem.

bu Almak method, oturumu ve işleyebileceğiniz bir hatayı döndürür. Kullanıcının kimliğini doğrulamanız gerekiyorsa, kimlik doğrulaması yapabilir veya yetkilendirebilirsiniz. giriş yapmak işleyici.

// oturum açma işleyicisi, oturumu çerez deposundan alır
işlevgiriş yapmak(yazar http. ResponseWriter, istek * http. Rica etmek) {
session, err := cookieStore().Get (istek, "Talepten Gelen Çerez Adı")

eğer hata != sıfır {
kayıt. Fatalln (hata)
}

// işleme göre kullanıcı kimlik doğrulamanızı burada ayarlayın
oturum. Değerler["yetkilendirme durumu"] = doğru
hata = oturum. Kaydet (istek, yazar)

eğer hata != sıfır {
dönüş
}
}

Values ​​özelliği, çerez deposundaki oturumla ilgili verileri tutar:

bu Kaydetmek yöntem, oturumu tanımlama bilgisi deposuna kaydeder. İşleyicilerinizde daha yüksek güvenlik için başka kimlik doğrulama önlemlerine ihtiyacınız olacak.

Bir Kullanıcının Oturum Açma Durumunu Doğrulama

Doğrulama işleyiciniz, tanımlama bilgisi deposunun tanımlama bilgilerini kullanarak oturumu müşterinin tanımlama bilgisinden almalıdır. Almak yöntem. Ardından oturumu alabilir ve kullanıcının kimliğini doğrulayabilirsiniz.

işlevkontrolAuthStatus(yazar http. ResponseWriter, istek * http. Rica etmek) {
session, err := cookieStore().Get (istek, "Talepten Gelen Çerez Adı")

eğer hata != sıfır {
kayıt. Fatalln (hata)
}

kimliği doğrulandı := oturum. Değerler["yetkilendirme durumu"]

eğer kimliği doğrulanmış == doğru {
yazar. WriteHeader (http. DurumTamam) // 200 durum kodu yaz
dönüş
} başka {
yazar. WriteHeader (http. StatusBadRequest) // 400 http durum kodu yaz
dönüş
}
}

bu kimliği doğrulanmış değişken kullanır değerler durumu tanımlama bilgisi deposundan almak için özellik. if ifadesi daha sonra bu kimlik doğrulama durumunu doğrular. olarak değerlendirirse doğru, müşteri 200'ü alır HTTP durum kodu. Kimlik doğrulama durumu doğru değilse, istemci 400 HTTP durum kodunu alır.

Oturum Çıkış İşleyicisi

Oturum kapatma işleyici işleviniz, oturum açma işleyici işlevine çok benzer olacaktır. Kullanıcının oturumuyla ilgili tüm verileri tanımlama bilgisi deposundan silecek ve kimlik doğrulama durumunu geçersiz kılacaksınız.

işlevçıkış Yap(yazar http. ResponseWriter, istek * http. Rica etmek) {
session, err := cookieStore().Get (istek, "Talepten Gelen Çerez Adı")

eğer hata != sıfır {
dönüş
}

// kullanıcının oturumunu çerez deposundan geçersiz kıl
oturum. Değerler["yetkilendirme durumu"] = yanlış
hata = oturum. Kaydet (istek, yazar)

eğer hata != sıfır {
dönüş
}
}

bu çıkış Yap işleyici işlevi, kullanıcının oturum kimlik doğrulama durumunu geçersiz kılar ve durumu tanımlama bilgisi deposuna kaydeder.

Hassas Verileri Oturumlarda Saklamayın

Oturumlar, veri depolamak için harikadır, ancak en iyisi bu oturumlarda hassas veri depolamaktan kaçınmaktır. Verilerini bir çerezde saklar ve düz HTTP üzerinden gönderirseniz, bir saldırgan bir oturumu ele geçirebilir. Uygulamanızın güvenliği kullanıcılarınız için önemlidir.

Oturumlar durum bilgisidir ve hem SQL hem de NoSQL veritabanları için Gorilla paketi için çerez depolarının birçok veritabanı uygulaması vardır.