web-dev-qa-db-fra.com

Comment définir un cookie de consentement dans Blazor Server

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?

3
Ned Flanders

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;

  • J'ai implémenté la vue partielle en tant que composant de rasoir
  • recherchez /_CookieConsentPartial.razor dans le dossier partagé
  • MainLayout.razor utilise ce composant de rasoir

  • Le fichier _Host.cshtml comprend mon fichier d'interopérabilité js

  • Recherchez netLearnerJsInterop.js dans wwwroot
  • 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!

4
Shahed C - MSFT

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:

https://github.com/Blazored/LocalStorage

1
tocqueville