J'ai :
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:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user