1
votes

Comment générer un lien de téléchargement sécurisé unique dans Laravel?

J'ai une application mobile pour vendre des didacticiels vidéo.

Je dois générer un lien de téléchargement unique et unique pour les afficher dans mon application.

L'application est basée sur une API et j'utilise le framework Laravel pour le back-end. J'ai enregistré tous les identifiants d'appareil envoyés depuis Android.

Comment puis-je générer un lien pour chaque utilisateur ayant acheté des produits pour n'importe quel appareil?


1 commentaires

vous pouvez consulter la section url de la documentation. utilisez laravel.com/docs/5.7/urls


4 Réponses :


0
votes

Créez une clé unique pour chaque utilisateur et envoyez la clé avec la demande lors du téléchargement.

Lorsqu'un utilisateur demande le produit, vérifiez que la clé existe déjà ou non et vérifiez également si la clé appartient à l'utilisateur.


1 commentaires

Si l'appareil est également votre préoccupation, vous pouvez également stocker l'identifiant de l'appareil et vérifier que la clé unique appartient à la fois à l'appareil et à l'utilisateur ou non.



4
votes

Vous pouvez générer un jeton unique pour chaque application qui utilise des achats.

$url = "http://example.com/activate.php?token=$token";

Lorsqu'il y a une demande de téléchargement, vous pouvez simplement détruire

$token = sha1(uniqid(time(), true));

Vous pouvez vérifier le jeton de l'utilisateur respectif et faire ce que vous voulez.

Merci


2 commentaires

comment renvoyer ce lien vers mon fichier vidéo pour l'afficher dans l'application mobile?


Si vous utilisez le backend laravel, vous devez utiliser api. Ce n'est qu'un exemple, maintenant vous devez créer une route pour cela, quelque chose comme: Route :: get ('user / {id} / app / {token}', 'UserControllerController @ methodname');



7
votes

Vous pouvez utiliser des "URL signées" (Laravel> = 5.6). Ces URL ont un hachage «signature» ajouté. La méthode suivante crée une URL signée

URL::temporarySignedRoute(
    'unsubscribe', now()->addMinutes(30), ['user' => 1]
); 

Si vous souhaitez générer une URL de route signée temporaire qui expire, vous pouvez utiliser la méthode temporaireSignedRoute:

URL::signedRoute('video.download', ['user_id' => 1, 'video_id'=1]);

Documentation Laravel: https://laravel.com/docs/5.7/urls#signed-urls


1 commentaires

Cela ne répond pas à la question. OP a demandé des URL à usage unique. Mettre une date d'expiration ne le fait pas une seule fois



1
votes

Si vous ne souhaitez pas avoir à configurer cela vous-même, j'ai créé un petit package pour vous aider à créer des URL signées avec des durées de vie et des clics limités.

https://github.com/linkeys-app/signed-url/ a>

Cela vous donnera plus de fonctionnalités que les URL signées intégrées offertes par laravel puisque vous pouvez définir le nombre de clics sur un lien avant l'expiration. Dans ce cas, il vous suffit d'utiliser:

Link::generate('myurl.com/download', ['user' => 1, 'video' => 5], null, 1);

Cela vous permettra de joindre des données à un lien, de ne lui donner aucune date d'expiration (bien qu'en passant une date d'expiration dans le troisième paramètre expirera le lien à un moment donné) et n'autorisera qu'un seul clic avant l'expiration du lien.


0 commentaires