Первоначально опубликовано вISLAND
В предыдущей главе мы оставили небольшой хвост, то есть промежуточное ПО для проверки разрешений и игру с ним, поэтому сегодня мы его улучшим.
🍪 Печенье
Продолжая с прошлого раза, как определить, вошел ли пользователь в систему?cookie
хорошее доказательство,cookie
Он будет сохранен в браузере и будет передаваться каждый раз при доступе к запросу.cookie
чтобы определить, вошел ли пользователь в систему.
В итоге в первую очередь нам нужно сохраниться при входе в системуcookie
. ИсправлятьuserHandler
серединаUserLogin
код
Убедившись, что пароль правильный,cookie
добавить.
context.SetCookie("user_cookie", string(u.Id), 1000, "/", "localhost", false, true)
Давайте введем эти параметры здесь.Первый параметр-имя файла cookie, второй параметр-значение файла cookie, третий параметр-срок действия файла cookie.Если файл cookie существует более установленного времени, файл cookie будет недействительным, и он больше не является нашим действительным файлом cookie, четвертый параметр — это каталог, в котором находится файл cookie, пятый параметр — домен, указывающий область действия нашего файла cookie, шестой параметр указывает, можно ли получить к нему доступ только через https; седьмой параметр указывает, можно ли оперировать файлом cookie через js-код.
Запустите наш проект, войдите в систему, откройте нашу консоль с помощью F12, выберите «Приложение», найдите файл cookie на боковой панели и выберите наш сайт, В это время мы можем видеть информацию о файлах cookie, которую мы только что установили, с правой стороны.
И есть атрибут Expires/Max-Age, который указывает время истечения срока действия файла cookie, по истечении которого файл cookie автоматически исчезает.
На данный момент наш файл cookie успешно установлен.
🥞 Получить куки через промежуточное ПО
Теперь, когда файл cookie успешно получен, пришло время изменить наше недавно написанное промежуточное ПО Auth.
Сначала мы создаем файл 401.tmpl для отображения информации, когда наших разрешений недостаточно.
{{template "header"}}
{{template "nav"}}
请先登录:<a href="/">首页</a>
Когда мы хотим получить доступ к маршруту, для которого требуются разрешения, у нас недостаточно разрешений, и мы перейдем на эту страницу.
На этом этапе мы улучшим наше промежуточное ПО.
func Auth() gin.HandlerFunc {
return func(context *gin.Context) {
_, e := context.Request.Cookie("user_cookie")
if e == nil {
context.Next()
} else {
context.Abort()
context.HTML(http.StatusUnauthorized, "401.tmpl", nil)
}
}
}
Здесь мы проходимcontext.Request.Cookie()
чтобы получить указанныйcookie
. Вот еще одна функцияcontext.Abort()
Указывает, что текущий запрос прерван.
Перезапускаем проект и сразу переходим в гостиhttp://localhost:8080/user/profile/?id=5
, появится наш401
страница. Когда мы входим в систему, а затем получаем к ней доступ, мы можем получить к ней обычный доступ.
Этот момент объясняет нашуauth
Промежуточное ПО делает свое дело.
🔄Обновить куки
вышеcookie
В настройках есть параметр для установки времени истечения, так как долго устанавливается время истечения? Если время истечения установлено слишком длинным, это может создать угрозу безопасности, а если время истечения установлено слишком коротким, это принесет неудобства пользователю.
Итак, мы собираемсяcookie
Автоматически обновлять нашcookie
время.
Измените наш промежуточный код.
Во-первых, получить оригиналcookie
, а затем сброситьcookie
.
func Auth() gin.HandlerFunc {
return func(context *gin.Context) {
cookie, e := context.Request.Cookie("user_cookie")
if e == nil {
context.SetCookie(cookie.Name, cookie.Value, 1000, cookie.Path, cookie.Domain, cookie.Secure, cookie.HttpOnly)
context.Next()
} else {
context.Abort()
context.HTML(http.StatusUnauthorized, "401.tmpl", nil)
}
}
}
Перезапустите наш проект и по-прежнему открывайте консоль нашего проекта.Каждый раз, когда вы получаете доступ к интерфейсу, требующему разрешений, вы увидите, что время истечения срока действия файла cookie снова обновляется.
✍Резюме
В этой главе в основном описываютсяcookie
Как добавить, как получить и как проверить через промежуточное ПОcookie
и обновитьcookie
👩💻 Код для этой главы
Рекомендуемое чтение
Джин (1): Привет
Джин (2): маршрутизатор маршрутизации
Джин (три): шаблон tmpl
Джин (четыре): проверка отправки формы и привязка модели
Джин (5): подключиться к MySQL
Джин (шесть): загрузка файла
Джин (семь): использование и определение промежуточного программного обеспечения
Личный публичный аккаунт
Последние статьи будут опубликованы в общедоступном аккаунте, приглашаем всех обратить внимание