Vérification d’identité
Vérifiez qu’un utilisateur identifié est bien la personne annoncée par votre page. Personne ne pourra ainsi lire les conversations d’un autre utilisateur en modifiant son identifiant.
Fonctionnement
Votre serveur calcule un HMAC-SHA256 de l’identifiant de l’utilisateur avec votre clé secrète d’identité et transmet le résultat au widget dans userHash. Yuno Chat calcule la même empreinte. Si elles correspondent, l’identité de l’utilisateur est vérifiée. La clé secrète n’est jamais transmise au navigateur.
- Copiez la clé secrète d’identité (
idv_…) depuis Paramètres → Développeurs. - Générez l’empreinte sur votre serveur pour l’utilisateur connecté.
- Transmettez-la à
Yuno("identify"). - Activez Exiger une identité vérifiée dans le tableau de bord. Les appels à
identifysans empreinte valide seront alors rejetés.
Générer l’empreinte
import { createHmac } from "node:crypto"
export function yunoUserHash(userId) {
return createHmac("sha256", process.env.YUNO_IDENTITY_SECRET)
.update(String(userId))
.digest("hex")
}Transmettre l’empreinte au widget
app/layout.tsx (Next.js)
import Script from "next/script"
import { getCurrentUser } from "@/lib/auth"
import { yunoUserHash } from "@/lib/yuno"
export default async function RootLayout({ children }: { children: React.ReactNode }) {
const user = await getCurrentUser()
const settings = user
? { siteId: "site_8Kq2mXvR", userId: user.id, email: user.email, name: user.name, userHash: yunoUserHash(user.id) }
: { siteId: "site_8Kq2mXvR" }
return (
<html lang="fr">
<body>
{children}
<Script id="yuno-settings">{`window.YunoSettings = ${JSON.stringify(settings)}`}</Script>
<Script src="https://cdn.yuno.chat/widget.js" strategy="lazyOnload" />
</body>
</html>
)
}Transmettre userId, email, name et userHash dans YunoSettings revient à appeler identify dès le chargement du widget.
Calculez l’empreinte du même identifiant que celui transmis dans
userId, sous forme de chaîne de caractères sans espaces. N’utilisez jamais l’adresse e-mail : elle peut changer et est plus facile à deviner.