`jwtPayload.video` returns null grants for tokens from LiveKit server SDKs
メンテナーはふだん 1 日以内に返信
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 76/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
調査の方向性
lib/src/token_source/jwt.dart の LiveKitVideoGrant から始めて、フィールドのマッピングを issue で説明されている camelCase のキーと比較します。既存の JWT ペイロードのテストと、すでに roomJoin を含むトークンを作成している caching_token_source_test.dart を確認します。camelCase の権限キーを含むトークンが null ではなく期待される値を返せば完了です。
索引モデルが issue の本文から書いたものです。
説明
Describe the bug
TokenSourceResponse.jwtPayload?.video returns a LiveKitVideoGrant whose fields are all null except room, hidden and recorder, even when the token grants them. For example, video.roomJoin and video.canPublish are null for a token that has roomJoin: true and canPublish: true.
Root cause
LiveKitVideoGrant in lib/src/token_source/jwt.dart maps its fields to snake_case keys (room_join, can_publish, can_publish_sources, and so on). LiveKit tokens use camelCase keys in the video claim:
livekit/protocolauth/grants.go:json:"roomJoin",json:"canPublish",json:"canPublishSources".livekit-server-sdk(Node):VideoGrant.roomJoin,VideoGrant.canPublish, serialized as-is.- The Android SDK
VideoGrantsreadsroomJoinandcanPublish.
The existing test builds its token with snake_case keys, so it passes, while caching_token_source_test.dart in the same package builds tokens with roomJoin.
To reproduce
final token = JWT({
'sub': 'alice',
'video': {'room': 'demo', 'roomJoin': true, 'canPublish': true},
}).sign(SecretKey('secret'));
final response = TokenSourceResponse(serverUrl: 'wss://example.livekit.cloud', participantToken: token);
print(response.jwtPayload?.video?.roomJoin); // null
print(response.jwtPayload?.video?.canPublish); // null
Expected: true and true.
Actual: null and null.
Environment
- livekit_client main (2.13.1)
- 主要言語
- Dart
- スター
- 421
- フォーク
- 260
- 平均マージ
- 2日 5時間
- マージ済み PR(30日)
- 17
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
livekit/client-sdk-flutter のほかの issue
-
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
livekit/client-sdk-flutter#1227 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
livekit/client-sdk-flutter#1221 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 30/100
livekit/client-sdk-flutter#1219 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
iOS: `audioDeviceModule` becomes permanently `nil`/unavailable after backgrounding, even though `AVAudioSession` is never interrupted対応中かも @hiroshihorie が 28 日前に担当しました。 オープン
livekit/client-sdk-flutter#1206 · コメント 2 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
[bug]Early reconnect during the initial room connection再び着手できるかも @hiroshihorie が 40 日前に担当しましたが、オープン中のプルリクエストはありません。 オープン
livekit/client-sdk-flutter#1189 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
livekit/client-sdk-flutter の issue をすべて見る
似ている issue
-
coverage 1.16.0: format_coverage fails on the `{}` that `dart test --coverage` writes for fully skipped suites対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
メンテナーはふだん 1 日以内に返信
-
fyi-ecosystem platform-ios team-ios
難易度 1/5 1時間未満 初心者へのやさしさ 70/100
flutter/flutter#194348 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
documentation good first issue
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
djazairdev/wilayas#22 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 80/100
rajput-hemant/calculator#199 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
leancodepl/app-rating#35 ·