Gin-JWT - это пакет в Golang, который предоставляет механизм аутентификации и авторизации JSON Web Token (JWT) для веб-приложений, написанных с использованием фреймворка Gin. Если вы хотите использовать аутентификацию и авторизацию на основе JWT в своем приложении на Gin, можете следовать следующим шагам для настройки Gin-JWT:
Шаг 1: Установка Gin-JWT
Первым шагом является установка пакета Gin-JWT с помощью менеджера модулей Go:
go get -u github.com/appleboy/gin-jwt/v2
Шаг 2: Импорт пакетов
Импортируйте необходимые пакеты в вашем файле Go:
import ( "github.com/gin-gonic/gin" "github.com/appleboy/gin-jwt/v2" )
Шаг 3: Настройка аутентификации и обработчиков маршрутов
Создайте функцию, которая будет использоваться в качестве обработчика регистрации пользователей:
func register(c *gin.Context) { // Реализация вашей функции регистрации пользователей // Здесь вы можете создать учетную запись пользователя и сохранить ее в вашу базу данных }
Аналогичным образом создайте функцию для аутентификации пользователей:
func login(c *gin.Context) { // Реализация вашей функции аутентификации // Здесь вы можете проверить учетные данные пользователя исходя из запроса // Верните JWT токен в случае успешной аутентификации }
Теперь создайте обработчик маршрута для создания маршрута регистрации и аутентификации:
func main() { r := gin.Default() authMiddleware := &jwt.GinJWTMiddleware{ Realm: "test zone", Key: []byte("secret key"), Timeout: time.Hour, MaxRefresh: time.Hour, IdentityKey: "username", Authenticator: func(c *gin.Context) (interface{}, error) { // Реализуйте вашу функцию аутентификации здесь // Проверьте учетные данные пользователя, и если они верны, верните идентификатор пользователя // В противном случае верните ошибку аутентификации }, Authorizator: func(data interface{}, c *gin.Context) bool { // Реализуйте вашу функцию авторизации здесь // Проверьте авторизационные данные пользователя на доступ к ресурсу // Верните true, если пользователь авторизован, и false в противном случае }, Unauthorized: func(c *gin.Context, code int, message string) { c.JSON(code, gin.H{"message": message}) }, TokenLookup: "header: Authorization", TokenHeadName: "Bearer", TimeFunc: time.Now, } r.POST("/register", register) r.POST("/login", authMiddleware.LoginHandler) auth := r.Group("/auth") auth.Use(authMiddleware.MiddlewareFunc()) { auth.GET("/profile", profile) } r.Run(":8080") }
Обратите внимание, что вы должны заменить реализацию функций аутентификации и авторизации соответствующим кодом, который соответствует вашей логике приложения.
Шаг 4: Добавление JWT-защищенного маршрута
Добавьте маршрут, который будет защищен аутентификацией JWT:
func profile(c *gin.Context) { claims := jwt.ExtractClaims(c) user, _ := c.Get("user") c.JSON(200, gin.H{ "claims": claims, "user": user.(*jwt.GinJWTMiddleware).Identity, }) }
Функция profile может использоваться для получения профиля пользователя после успешной аутентификации.
Шаг 5: Запуск сервера
Запустите ваш сервер с помощью команды:
go run main.go
Теперь ваш сервер настроен для использования Gin-JWT для аутентификации и авторизации пользователей на основе JWT. Регистрация и вход пользователей будут обрабатываться с помощью обработчиков маршрутов register и login соответственно. Маршрут /auth/profile будет доступен только для авторизованных пользователей и позволит получить информацию о профиле пользователя.