0.6.1: Fix Spotify OAuth scope missing user-library-read
connect.py's OAuth scope request (playlist-read-private playlist-read-collaborative) didn't match what sldl's own built-in login flow requests (same two, plus user-library-read). The narrower scope alembic granted let sldl refresh a valid access token, but Spotify then returned 403 Forbidden loading the playlist regardless of ownership, which sldl turns into an unhandled-exception crash (exit 134) instead of a clean scope error. Found by reproducing a friend's crash: his playlist was his own, connected via his own OAuth, correct redirect URI -- ruling out the ownership/ visibility explanation and pointing at the scope mismatch instead. Also: - run-playlist.sh: detect exit 134 specifically and log a pointed hint (distinguishing the Forbidden-loading-playlist case from any other unhandled sldl exception) instead of just "sldl finished with exit code 134" with no context. - README: document that anyone who connected Spotify before this version needs to click Connect Spotify again -- existing refresh tokens carry the old, narrower scope and don't upgrade themselves. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -25,7 +25,13 @@ router = APIRouter(tags=["spotify-connect"])
|
||||
|
||||
AUTHORIZE_URL = "https://accounts.spotify.com/authorize"
|
||||
TOKEN_URL = "https://accounts.spotify.com/api/token"
|
||||
SCOPES = "playlist-read-private playlist-read-collaborative"
|
||||
# Matches exactly what sldl's own built-in OAuth login flow requests (seen in
|
||||
# its printed authorize URL: user-library-read + these two) -- granting a
|
||||
# narrower scope than sldl expects gets a token sldl can refresh fine but
|
||||
# then gets 403 Forbidden from Spotify partway through loading a playlist,
|
||||
# which sldl turns into an unhandled-exception crash (exit 134) rather than a
|
||||
# clean scope error.
|
||||
SCOPES = "playlist-read-private playlist-read-collaborative user-library-read"
|
||||
|
||||
|
||||
def _callback_redirect_uri(request: Request) -> str:
|
||||
|
||||
Reference in New Issue
Block a user