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. При потере доступа нужно повторное согласие пользователя. Секрет, токен и полный результат подключения не выводите в браузер или общедоступные логи.