Easy Digital Downloads dispose d'un système robuste pour sécuriser vos liens de téléchargement de fichiers et empêcher leur utilisation abusive. Lorsqu'un lien de téléchargement de fichier est cliqué, l'ordre des paramètres fournis est important. De temps en temps, certaines configurations d'hébergement, couches de mise en cache ou fournisseurs de CDN peuvent réorganiser les paramètres de la chaîne de requête afin de permettre une mise en cache de base. La réorganisation de ces éléments entraînera l'échec de la validation du jeton par Easy Digital Downloads pour le lien de téléchargement d'un client.
Comment puis-je savoir si c'est mon problème ?
Si, lorsqu'un utilisateur clique pour télécharger ses fichiers, il reçoit l'erreur « Vous n'avez pas la permission de télécharger ce fichier », vérifiez que l'URL a toujours le format suivant, en prêtant une attention particulière à l'ordre des paramètres.
https://example.org/index.php?eddfile=...&ttl=...&file=...&token=...
Si les paramètres de la chaîne de requête ne sont pas dans l'ordre ci-dessus, alors vous rencontrez le problème décrit ci-dessus. Nous avons quelques solutions pour aider à prévenir cela.
Si vous avez configuré un système de mise en cache de page, comme Cloudflare ou Varnish, vous pourriez encore voir cette erreur même si vos paramètres semblent être dans le bon ordre. Cela est dû au système de mise en cache de page qui trie ces paramètres avant d'envoyer votre requête au serveur Web pour qu'elle soit traitée par PHP.
Comment puis-je éviter ce problème ?
Modifications de la configuration de l'hébergement
La situation idéale est de ne pas faire réorganiser les paramètres de la chaîne de requête par vos fournisseurs lorsqu'il s'agit d'un téléchargement de fichier, en empêchant toute requête contenant le paramètre de chaîne de requête eddfile d'être transmise aux règles de réorganisation.
Si vous utilisez Cloudflare et avez activé sa fonctionnalité Tri de la chaîne de requête, vous devriez pouvoir désactiver cette fonctionnalité pour permettre aux utilisateurs de télécharger leurs fichiers sans erreur.
Extrait de code personnalisé
Nous reconnaissons que cela n'est pas toujours possible avec certains fournisseurs, nous avons donc écrit une petite fonction qui exécutera une deuxième fois toute validation échouée, pour vérifier que nous avons bien reçu les éléments dans le bon ordre.
function ck_custom_validate_url_token( $ret, $url, $query_args ) {
// If basic validation failed, let's make sure the URL prarms were in the right order and try again
if ( false === $ret ) {
$parts = parse_url( $url );
wp_parse_str( $parts['query'], $query_args );
$fix_arg_order = array(
'eddfile' => $query_args['eddfile'],
'ttl' => $query_args['ttl'],
'file' => $query_args['file'],
'token' => $query_args['token'],
);
$fixed_url = add_query_arg( $fix_arg_order, site_url() );
$fixed_token = edd_get_download_token( $fixed_url );
$ret = $query_args['token'] === $fixed_token;
}
return $ret;
}
add_filter( 'edd_validate_url_token', 'ck_custom_validate_url_token', 10, 3 );
La fonction ci-dessus doit être testée dans un environnement de staging avant d'être utilisée dans un environnement de production, pour vérifier qu'elle fonctionne correctement dans votre configuration spécifique.
