Джин (8): использование файлов cookie

Go Gin
Джин (8): использование файлов cookie

Первоначально опубликовано в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, которую мы только что установили, с правой стороны.

查看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

👩‍💻 Код для этой главы

Github

Рекомендуемое чтение

Джин (1): Привет
Джин (2): маршрутизатор маршрутизации
Джин (три): шаблон tmpl
Джин (четыре): проверка отправки формы и привязка модели
Джин (5): подключиться к MySQL
Джин (шесть): загрузка файла
Джин (семь): использование и определение промежуточного программного обеспечения

Личный публичный аккаунт

Последние статьи будут опубликованы в общедоступном аккаунте, приглашаем всех обратить внимание