Чтобы предоставить другой ответ, хотя и требующий больше кода, вы можете создать собственный декоратор, который назначает метаданные для класса и / или метода класса. Теоретически, эти метаданные должны указывать охраннику пропустить проверку аутентификации на всем этом классе или на этом маршруте (в зависимости от того, как вы настроили метаданные) и возвращать true
, чтобы запрос мог все еще выполняться.
У меня есть такой декоратор , настроенный здесь , который устанавливает метаданные, если вы хотите посмотреть, как он работает.
При таком подходе вы можете связать охрану глобально, а затем добавить декоратор @AuthSkip()
(или как вы его называете) к маршрутам или классам, которые вы не хотите авторизовать.
Теперь вам нужно расширить AuthGuard('jwt')
и обновить метод canActivate()
, чтобы проверить эти метаданные в текущем контексте. Это означает, что вам нужно добавить Reflector
в качестве зависимости к классу защиты и использовать его для получения метаданных как от класса, так и от текущего маршрута (если вы зашли так далеко, чтобы заставить его работать для игнорирования классов и не только маршруты), и если метаданные существуют, то маршрут должен был быть пропущен, верните true
от охранника. Я делаю такую проверку здесь , если вы хотите увидеть пример этого в действии.