Closed LaplancheMaxime closed 7 months ago
Bonjour @LaplancheMaxime !
Je pense avoir mieux compris votre besoin ici : vous voulez avoir accès publiquement aux photos du matériel, c'est bien ça ?
En fait, le logiciel ne permet pas de faire cela, car selon nous les photos font partie des données du matériel au même titre que toutes ces autres informations, et sont donc accessible uniquement quand l'utilisateur est connecté.
On pourrait éventuellement envisager d'ajouter un paramètre global pour activer la visibilité "publique" des images liées au matériel, mais ce n'est pas un cas d'usage très courant... Quel est votre besoin exactement ? Pourquoi vouloir afficher ces photos de publiquement ? Je vous demande ça juste pour bien comprendre le besoin et voir si il n'y a pas une meilleure façon de faire.
En attendant, une solution temporaire serait de paramétrer votre instance avec une valeur très élevée pour la clé sessionExpireHours
(voir sur le wiki). Ainsi, votre token expirera moins souvent (mais il expirera quand même un jour)...
Une autre solution en attendant (pas du tout perenne, voir même très sale) serait d'ajouter tous les URLs de vos photo matériel dans la constante PUBLIC_ROUTES
de la classe Robert2\API\Config\Acl
... Comme ceci :
public const PUBLIC_ROUTES = [
'/materials/12/picture',
'/materials/32/picture',
'/materials/35/picture',
'/materials/41/picture',
// ... etc.
];
Ou bien d'adapter la méthode match()
de la classe Robert2\API\Http\Request
pour qu'elle accepte un placeholder d'identifiant dans le matching de l'URL... Mais attention, toucher à cette méthode peut avoir un impact sérieux sur la sécurité !
Bonjour @polosson, Désolé pour ma réponse tardive.
Nous utilisons Robert dans son utilisation prévue. Cependant, nous avons un front qui nous permet à nos clients de faire des demandes de location/devis directement depuis celui-ci. Nous mettons également à disposition une liste des matériels disponibles.
Nous utilisons donc l'API de Robert pour les actions suivantes
GET - Disponibilités d'un matériel sur une période
GET - Photo d'un matériel
GET - Détails d'un matériel
GET/POST/PUT - Bénéficiaires
GET/POST/PUT - Entreprises
Nous l'utilisons également pour synchroniser les bénéficiaires de robert vers des tiers facturables dans notre ERP.
Pour réaliser l'ensemble des actions, nous utilisons un utilisateur "API". Nous l'authentifions via le endpoint POST - /session
Le contexte est-il plus précis ?
Le problème, c'est lorsque nous tentons de récupérer les photos mais que le jeton est expiré, nous obtenons un retour en HTML, en HTTP 200
. (La page de login en l’occurrence)
Nous utilisons donc le endpoint/materials/12/picture
comme prévu.
Est-il possible de passer cet endpoint dans la route api/
.
Exemple :
_BASE_URL_/api/materials/id/picture
plutôt que _BASE_URL_/materials/id/picture
Nous pourrions ainsi profiter du même comportement que tous les autres endpoints ? (404, 404, 200, etc...)
Hello @LaplancheMaxime,
Ceci va être corrigé dans la prochaine version (0.24) : les URL des photos de matériel vont devenir "publiques". Il faudra utiliser l'URL /static/materials/[id]/picture
à la place de materials/[id]/picture
.
Cette nouvelle route étant publique, vous n'aurez donc plus besoin d'authentification JWT préalable pour récupérer les photos du matériel.
Je ferme ce ticket vu que ce sera très bientôt corrigé :slightly_smiling_face:
Messieurs,
Je me permet de refaire un ticket concernant mon ticket #383 Le souci n'est pas résolu avec la version 20.X
En vous remerciant par avance Bon courage