you_are_enot
@you_are_enot
Пограммист любитель

Как избавиться от предупреждения?

Пытаюсь написать написать jwt middleware, который будет передавать данные из токена в следующую функцию через context.

ctx := r.Context()
ctx = context.WithValue(ctx, "userID", tk.UserID)
ctx = context.WithValue(ctx, "token", tk.Token)

next.ServeHTTP(w, r.WithContext(ctx))


Но такой код подчёркивается жёлтым и выводится сообщение. Что я делаю не так?

should not use basic type string as key in context.WithValue


5e58edf95d43e543505280.png
  • Вопрос задан
  • 261 просмотр
Решения вопроса 1
EvgenyMamonov
@EvgenyMamonov Куратор тега Go
Senior software developer, system architect
Нельзя использовать строки как ключи, это рано или поздно приведёт к конфликтам по названиям.
При проверке ключа на соответствие библиотека context сравнивает значение и тип ключа.
Ключ не должен быть простого типа, типа string, int и т.д.
Нужно создавать отдельный тип для ключа.
Такой подход позволит вам иметь в контексте несколько значений с одинаковым ключём, но разного типа.

Вот пример как правильно сделать:
type contextKey uint

const (
    UserIDContextKey contextKey = 1
)
...
ctx := r.Context()
ctx = context.WithValue(ctx, UserIDContextKey, tk.UserID)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы