J'ai une application Blazor 3.1 avec identité dans laquelle je souhaite mettre en œuvre une bannière de consentement aux cookies.
Dans le classique ASP .NET Core, il existe un modèle Nice pour une bannière de consentement aux cookies.
@using Microsoft.AspNetCore.Http.Features
@{
var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
var showBanner = !consentFeature?.CanTrack ?? false;
var cookieString = consentFeature?.CreateConsentCookie();
}
@if (showBanner)
{
<div class="container">
<div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert">
Use this space to summarize your privacy and cookie use policy. <a class="alert-link" asp-area="" asp-controller="Home" asp-action="Privacy">Learn More</a>.
<button type="button" class="accept-policy close" data-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString">
<span aria-hidden="true">Accept</span>
</button>
</div>
</div>
<script>
(function () {
var button = document.querySelector("#cookieConsent button[data-cookie-string]");
button.addEventListener("click", function (event) {
document.cookie = button.dataset.cookieString;
}, false);
})();
</script>
}
Si vous placez ce partiel dans la mise en page, vous disposez d'une bannière de consentement aux cookies fonctionnant parfaitement. S'il est configuré correctement, les utilisateurs ne peuvent même pas se connecter à Identity Framework tant qu'ils n'y consentent pas.
Étant donné que Blazor ne connaît pas un HttpContext, ce modèle ne fonctionne pas. Existe-t-il un moyen standard ou dois-je créer cette fonctionnalité par moi-même?
Je viens de résoudre ce problème dans une application Blazor 3.1 hier! J'ai choisi d'utiliser JS Interop et c'était super facile.
Mon application Web a plusieurs frontaux, y compris MVC, Razor Pages et Blazor, afin que vous puissiez ouvrir le fichier de solution principal, puis extraire le projet Blazor:
https://github.com/shahedc/NetLearnerApp
Choses à noter dans le projet Blazor;
MainLayout.razor utilise ce composant de rasoir
Le fichier _Host.cshtml comprend mon fichier d'interopérabilité js
le fichier js Interop contient l'utilisation de document.cookie
le composant rasoir utilise JSRuntime.InvokeVoidAsync pour appeler la méthode JS pour accepter le message de consentement GDPR et stocker le cookie
J'espère que cela pourra aider!
Pour définir des cookies sur le client, vous avez toujours besoin de Javascript Interop.
Voir cette réponse: Comment créer un cookie côté client en utilisant blazor
Vous pouvez également stocker les informations dont vous avez besoin dans le stockage local à l'aide de cette bibliothèque, sans avoir à écrire de Javascript: