Nous utilisons des cookies pour comprendre comment ce site est utilisé. Vous pouvez les accepter ou les refuser : consultez notre politique relative aux cookies pour en savoir plus.

Licences

TreatmentConsultant vérifie une clé de licence localement, dans le navigateur : signature, expiration et domaine sont tous vérifiés hors ligne, sans composant serveur requis. Si la clé est absente, invalide, expirée, ou non valable pour le domaine actuel, le widget affiche un filigrane en surimpression. Le parcours en dessous reste pleinement interactif dans tous les cas : le filigrane est purement visuel, un cas limite de licence ne casse donc jamais le parcours de réservation réel pour un vrai visiteur.

En plus de cette vérification locale, le widget effectue aussi une vérification distante en cache et au mieux auprès de l'API de licence de GuideMyHair, une fois toutes les 24 heures par clé de licence, pas à chaque chargement de page, pour détecter une licence annulée ou expirée côté serveur alors que son jeton reste valablement signé et non expiré. Cette vérification échoue en mode permissif : une erreur réseau ou un serveur GuideMyHair injoignable ne révoque jamais une licence valide localement, seule une réponse explicite « inactive » le fait. Le site de votre client n'est jamais cassé par notre disponibilité.

Voyez-la fonctionner avec une véritable clé de licence sur notre page de démo en direct.

Obtenir une clé

Achetez une offre sur la page des tarifs et votre clé de licence vous est envoyée automatiquement par e-mail. C'est un jeton signé : traitez-le comme n'importe quelle autre clé d'API (ne le publiez pas dans un dépôt public), mais il est sans risque de l'inclure dans votre bundle côté client, puisqu'il ne fait que prouver un droit d'usage, il ne donne accès à rien de sensible.

Transmettre la clé

Transmettez-la en tant que prop sur une seule instance, ou une fois via le plugin pour couvrir toutes les instances de votre application : une prop l'emporte toujours sur la clé du plugin si les deux sont définies.

vue
<TreatmentConsultant license-key="eyJhbGciOi..." />
ts
// app/plugins/hair-treatments.ts
import { createHairTreatments } from "srcdev-hair-treatments"

export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.vueApp.use(createHairTreatments({ licenseKey: "eyJhbGciOi..." }))
})

Correspondance de domaine

Chaque licence est verrouillée sur un ou plusieurs domaines, définis sur votre compte. Le nom d'hôte de la page actuelle est vérifié par rapport à cette liste :

  • localhost et 127.0.0.1 sont toujours autorisés, le développement local n'a donc jamais besoin d'une véritable clé.
  • Un domaine simple (example.com) couvre aussi sa version www., et inversement : inutile de lister les deux.
  • Une entrée générique (*.example.com) couvre tout sous-domaine de ce domaine, staging.example.com, preview.example.com, etc., mais pas le domaine nu lui-même, associez-la donc à une entrée simple example.com si vous avez besoin des deux.
  • Les domaines d'hébergement de prévisualisation partagés, *.vercel.app, *.netlify.app, et similaires, ne sont jamais pris en charge, sur aucune licence, en aucune circonstance. Ce domaine n'est pas le vôtre à licencier : il est partagé avec toutes les autres applications hébergées sur la même plateforme, l'autoriser reviendrait donc à autoriser tout le monde. Attendez-vous au filigrane sur les déploiements de prévisualisation : pointez plutôt un sous-domaine de votre propre domaine vers le déploiement si vous avez besoin d'une prévisualisation sans licence à partager.

Besoin d'ajouter ou de modifier des domaines sur une licence existante, par exemple pour ajouter un sous-domaine de préproduction ? Contactez-nous.

Content-Security-Policy

Si votre site définit une directive connect-src, ajoutez-y https://guidemyhair.com : c'est la vérification distante décrite ci-dessus, et une requête bloquée est identique à une erreur réseau du point de vue du widget, elle échoue donc silencieusement en mode permissif plutôt que d'afficher une erreur visible. Vous obtiendrez quand même un avertissement spécifique dans la console (« bloqué par Content-Security-Policy » contre un message d'échec réseau générique), consultez donc la console de votre navigateur en cas de doute.

Raisons du filigrane

RaisonAffiché quand
Aucune clé de licence fournieNi la prop ni le plugin n'ont de clé définie
La clé de licence n'a pas pu être vérifiéeLa clé est mal formée, ou n'a pas été signée par GuideMyHair
Cette licence a expiréPassé la date d'expiration de la licence (abonnements uniquement : les licences à vie n'expirent jamais)
Cette licence n'est pas valable pour ce domaineLe nom d'hôte actuel n'est pas couvert par les domaines de la licence, voir Correspondance de domaine ci-dessus
Cette licence n'est plus activeLa vérification distante quotidienne a reçu une réponse explicite « inactive » : la licence a été annulée ou a expiré côté serveur