Сесије су популарна опција за аутентификацију корисника широм веба. Сесија је период током којег се корисник активно бави апликацијом. Животни век сесије почиње када се корисник пријави и завршава када се одјави.

ХТТП је протокол без стања, тако да ћете често морати ручно да пратите активност корисника.

На страни сервера ваше апликације можете генерисати јединствену вредност, по могућности криптографски безбедну. Затим то можете да сачувате у колачићу који ће клијент послати вашој апликацији на будуће захтеве, стварајући облик стања.

Сесије у Го

Можете користити нет/хттп пакет за имплементацију сесија, а постоји много доступних пакета који то већ раде. Најпопуларнији је пакет Горилла сессионс. Овај пакет пружа функцију складиштења колачића и датотека уз прилагођену позадинску инфраструктуру сесије.

Покрените ову команду на свом радном простору Го да бисте инсталирали пакет Горилла сессионс.

иди набавите гитхуб.цом/горилла/сессионс

У овом водичу ћете користити складиште колачића за сесије. Користићете нет/хттп пакет да покренете веб сервер који ће проверити проблем корисника и опозвати сесије.

instagram viewer

Ево листе увоза које ће вам требати да пратите овај водич.

увоз (
"гитхуб.цом/горилла/сессионс"
"Пријава"
"нет/хттп"
)

Тхе Пријава пакет је за операције везане за евидентирање на основу статуса аутентификације корисника.

Једноставна имплементација продавнице колачића

Требаће вам продавница колачића за ваше функције руковаоца пријављивањем и одјавом. За вашу продавницу колачића, биће вам потребан тајни кључ за аутентификацију.

Ево функције за имплементацију продавнице колачића.

// функција цоокиеСторе креира складиште колачића са тајним кључем корисника
фунццоокиеСторе() *сесије.ЦоокиеСторе {
Тајни кључ := []бајт("супер-тајни-тајни кључ")
цоокиеСторе := сесије. НевЦоокиеСторе (СецретКеи)

// функција враћа складиште колачића тако да му друге функције могу приступити
повратак цоокиеСторе
}

У цоокиеСторе функција, декларисана променљива тајног кључа Тајни кључ је пример тајног кључа. У продукцији, ваш тајни кључ треба да буде криптографски сигуран, користећи крипто пакет на пример. Такође би требало да учитате тајну из датотеку променљивих окружења.

Функција враћа вредност *сесије. ЦоокиеСторе тип који представља складиште колачића обезбеђено тајним кључем. Користићете ЦоокиеСторе функција у вашем Пријавите се и одјавити се руковаоце за аутентификацију корисника и додељивање сесија.

Функција руковања пријавом

Желећете да проверите да ли је корисник већ пријављен пре него што креирате сесију у вашој функцији за руковање пријавом. Можете користити Добити метод на складишту колачића да преузме сесију из колачића и дода сесију клијентовом захтеву.

Тхе Добити метод враћа сесију и грешку коју можете да решите. Ако треба да аутентификујете корисника, можете да извршите аутентификацију или ауторизацију у Пријавите се руковалац.

// руковалац пријаве преузима сесију из продавнице колачића
фунцПријавите се(писац хттп. РеспонсеВритер, захтев *хттп. Захтев) {
сессион, ерр := цоокиеСторе().Гет (захтев, "Назив колачића из захтева")

ако ерр != нула {
Пријава. Фаталн (ерр)
}

// овде подесите аутентификацију корисника на основу операције
седница. Вредности["аутх статус"] = истинито
грешка = сесија. Сачувај (захтев, писац)

ако ерр != нула {
повратак
}
}

Својство Валуес садржи податке који се односе на сесију у складишту колачића:

Тхе сачувати метод чува сесију у складишту колачића. У вашим руковаоцима ће вам требати друге мере аутентификације за већу безбедност.

Провера статуса пријаве корисника

Ваш обрађивач верификације треба да преузме сесију из клијентовог колачића помоћу продавнице колачића Добити методом. Затим можете преузети сесију и аутентификовати корисника.

фунццхецкАутхСтатус(писац хттп. РеспонсеВритер, захтев *хттп. Захтев) {
сессион, ерр := цоокиеСторе().Гет (захтев, "Назив колачића из захтева")

ако ерр != нула {
Пријава. Фаталн (ерр)
}

аутентификована := сесија. Вредности["аутх статус"]

ако аутентификован == истинито {
писац. ВритеХеадер (хттп. Статус ОК) // написати 200 статусни код
повратак
} друго {
писац. ВритеХеадер (хттп. СтатусБадРекуест) // напиши 400 хттп статусни код
повратак
}
}

Тхе оверен променљива користи Вредности својство за преузимање статуса из продавнице колачића. Наредба иф тада потврђује овај статус аутентификације. Ако процени да истинито, клијент добија 200 ХТТП статусни код. Ако статус аутентификације није тачан, клијент добија 400 ХТТП статусни код.

Руковалац одјаве сесије

Ваша функција руковаоца одјавом биће веома слична функцији руковаоца пријавом. Избрисаћете све податке који се односе на сесију корисника из складишта колачића и поништити статус аутентификације.

фунцодјавити се(писац хттп. РеспонсеВритер, захтев *хттп. Захтев) {
сессион, ерр := цоокиеСторе().Гет (захтев, "Назив колачића из захтева")

ако ерр != нула {
повратак
}

// поништава сесију корисника из продавнице колачића
седница. Вредности["аутх статус"] = лажно
грешка = сесија. Сачувај (захтев, писац)

ако ерр != нула {
повратак
}
}

Тхе одјавити се функција руковаоца поништава статус аутентификације сесије корисника и чува статус у складишту колачића.

Не чувајте осетљиве податке у сесијама

Сесије су одличне за чување података, али је најбоље избегавати чување осетљивих података у њима. Нападач може да отме сесију ако сачувате њене податке у колачић и пошаљете их преко обичног ХТТП-а. Безбедност ваше апликације је важна за ваше кориснике.

Сесије су са стањем и постоји много имплементација база колачића за пакет Горилла, и за СКЛ и за НоСКЛ базе података.