en

Passport

passport-streamvi подключает StreamVi к серверному приложению Node.js через Passport. Эта библиотека обменивает код авторизации на токен; для дальнейших API-запросов используйте SDK Axios, SDK Fetch или обычный HTTP-клиент.

Установка

Установите исправленную стратегию из GitHub. При установке npm собирает пакет; сохраните package-lock.json в своём приложении:

npm install passport git+https://github.com/StreamVi/passport-streamvi.git

Исправление проверки state и PKCE слито в основную ветку. Старый npm-выпуск 1.0.6 его не содержит. Установка из GitHub выше включает исправление и не зависит от публикации нового выпуска в npm.

Для TypeScript также установите типы:

npm install --save-dev @types/passport @types/node

Подключение

Для Passport нужны OAuth-приложение, ID клиента, секрет, точный адрес возврата и серверная сессия. Секрет храните в серверных переменных окружения. Приложение должно настроить middleware сессии и Passport, маршрут начала подключения, обработчик возврата и хранение результата. Одной регистрации StreamViStrategy недостаточно.

Включите state: true и pkce: true при создании StreamViStrategy. Подключите middleware express-session до passport.initialize(): хранилище Passport сохраняет одноразовый state и PKCE verifier между перенаправлениями. Не подставляйте собственную строку state в passport.authenticate, чтобы не обходить хранилище. В обработчике возврата session: false отключает только сериализацию пользователя Passport, но не отменяет серверную сессию OAuth.

Полный пример Express с маршрутами подключения и сохранением результата есть в README стратегии. Альтернатива без Passport: серверный пример SDK.

Результат подключения

При успешном обмене стратегия передаёт в Passport объект пользователя:

ПолеСодержимое
accessTokenТокен API выбранного проекта
projectIdВнутренний ID проекта; перед числовым API-параметром проверьте и преобразуйте значение
projectExternalIdВнешний ID проекта

В обычном middleware Passport объект находится в req.user. При собственном callback passport.authenticate('streamvi', (error, user) => ...) читайте user.accessToken. Поля req.accessToken библиотека не создаёт.

Успешный обмен сразу вызывает success(user). Переданный конструктору callback проверки не вызывается на этом пути, профиль пользователя не загружается, refreshToken не возвращается. Сохраняйте подключение в обработчике успешной аутентификации и проверяйте фактический результат, а не ожидаемый профиль из старых примеров README.

Проверка возврата

Исправленная стратегия начинает обмен кода только после успешной проверки state хранилищем Passport. При PKCE она передаёт сохранённый code_verifier. Ошибка хранилища, отсутствующее, неправильное или повторно использованное состояние останавливают обмен. Асинхронное хранилище также поддерживается.

В старом npm-выпуске 1.0.6 переопределённый callback пропускал стандартную проверку state и не передавал code_verifier. Одних опций state: true или pkce: true в нём недостаточно. Если он ещё установлен, обновите пакет до исправленного кода из GitHub или используйте прямой OAuth с PKCE.

Текущий OAuth-контракт StreamVi не поддерживает обмен refresh_token. При потере доступа нужно повторное согласие пользователя. Секрет, токен и полный результат подключения не выводите в браузер или общедоступные логи.