Как настроить gin-jwt в golang?

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 будет доступен только для авторизованных пользователей и позволит получить информацию о профиле пользователя.