Как активно выйти из системы пользователя с помощью стратегии go-guardian JWT?

# #go #jwt #go-guardian

Вопрос:

Я использую go-guardian со стратегией JWT «базовый носитель» для аутентификации в своем проекте, и это работает очень хорошо. Когда у клиента нет токена, он входит в систему со своими учетными данными и получает JWT, который затем может использовать для дальнейших запросов, подобных этому:

                 $.ajax({
                    headers: {
                        'Authorization': 'Bearer '   token
                    },
                    url: '/api/archive',
                    type: "post",
                    contentType: 'application/json; charset=utf-8',
                    data: JSON.stringify(searchData),
                    dataType: 'json',
                    success: onDataReceived,
                    error: onError
                });
 

Однако мне интересно, как выполнить активный выход из системы на стороне сервера, например, когда клиент переходит на /auth/logoff маршрут? Конечно, клиент может просто удалить токен, но тогда сервер все равно примет его. Как я могу активно аннулировать или удалить токен на стороне сервера, чтобы я мог с уверенностью сказать, что клиент должен пройти повторную аутентификацию?

Комментарии:

1. Хм, я и сам недавно думал об этом. Но еще не исследовал. Похоже, в кэше есть метод Delete (), который может помочь: github.com/shaj13/go-guardian/blob/master/auth/cache.go

2. Да, я тоже об этом думал. Я думаю, что, вероятно, должна быть функция для признания пользователя недействительным, возможно, она просто еще не реализована. Я посмотрю на тайник.

Ответ №1:

Вы можете сохранить отдельную таблицу user_session , в которой сеанс также включает токен пользователя. При попадании в конечную точку вы проверяете подпись маркера, а также наличие этого маркера в базе данных.

Вам также необходимо сохранить маркер при входе пользователей в систему и удалить этот маркер при выходе пользователей из системы.

Причина, по которой вам нужно несколько сеансов для каждого пользователя, заключается в том, что пользователи могут входить с разных устройств, используя несколько токенов. Чтобы выйти из системы пользователя, вы можете удалить этот конкретный сеанс со user_session всех устройств или выйти из системы со всех устройств, вы можете удалить все сеансы этого пользователя.