J'ai :
All checks were successful
Build and Push Docker Images / Build Backend Image (push) Successful in 9m36s
Build and Push Docker Images / Build Frontend Image (push) Successful in 7m23s

Nettoyé les logs de debug dans backend/src/core/auth.py - supprimé tous les logger.info/warning de la fonction authenticate_user
Ajouté les tokens JWT à toutes les requêtes du player :
frontend/components/AudioPlayer.tsx : Ajouté Authorization header à loadWaveform()
frontend/components/AudioPlayer.tsx : Créé getAuthenticatedStreamUrl() qui ajoute le token en query param pour les <audio> et <a> tags
backend/src/api/routes/audio.py : Ajouté support du token en query param pour /stream et /download (compatibilité avec les tags HTML qui ne supportent pas les headers)
Le player devrait maintenant fonctionner entièrement avec l'authentification.
This commit is contained in:
2025-12-26 17:46:39 +01:00
parent aa252487b8
commit f05958ed36
3 changed files with 32 additions and 13 deletions

View File

@@ -79,8 +79,15 @@ export default function AudioPlayer({ track, isPlaying, onPlayingChange }: Audio
const loadWaveform = async (trackId: string) => {
setIsLoadingWaveform(true)
try {
const token = localStorage.getItem('access_token')
const headers: HeadersInit = {}
if (token) {
headers['Authorization'] = `Bearer ${token}`
}
const response = await fetch(
`${getApiUrl()}/api/audio/waveform/${trackId}`
`${getApiUrl()}/api/audio/waveform/${trackId}`,
{ headers }
)
if (response.ok) {
const data = await response.json()
@@ -159,10 +166,19 @@ export default function AudioPlayer({ track, isPlaying, onPlayingChange }: Audio
const progress = duration > 0 ? (currentTime / duration) * 100 : 0
const getAuthenticatedStreamUrl = (trackId: string) => {
const token = localStorage.getItem('access_token')
const baseUrl = `${getApiUrl()}/api/audio/stream/${trackId}`
if (token) {
return `${baseUrl}?token=${encodeURIComponent(token)}`
}
return baseUrl
}
return (
<div className="bg-gray-50 border-t border-gray-300 shadow-lg" style={{ height: '80px' }}>
{/* Hidden audio element */}
{track && <audio ref={audioRef} src={`${getApiUrl()}/api/audio/stream/${track.id}`} />}
{track && <audio ref={audioRef} src={getAuthenticatedStreamUrl(track.id)} />}
<div className="h-full flex items-center gap-3 px-4">
{/* Play/Pause button */}
@@ -301,7 +317,7 @@ export default function AudioPlayer({ track, isPlaying, onPlayingChange }: Audio
{/* Download button */}
{track && (
<a
href={`${getApiUrl()}/api/audio/download/${track.id}`}
href={getAuthenticatedStreamUrl(track.id).replace('/stream/', '/download/')}
download
className="w-8 h-8 flex items-center justify-center text-gray-600 hover:text-gray-900 transition-colors rounded hover:bg-gray-200 flex-shrink-0"
aria-label="Download"