یک نکتهی تکمیلی: روشی برای عدم استفاده از Razor Pages جهت لاگین کاربران در برنامههای Blazor Server
در این سری، از
razor pages به همراه قالب پیشفرض ASP.NET Core Identity، جهت پیاده سازی ورود کاربران به سیستم، استفاده شدهاست. یعنی کاربر یکبار از فضای Blazor Server خارج شده و وارد یک برنامهی ASP.NET Core Razor Pages معمولی میشود؛ لاگین میکند (در یک ناحیهی مخصوص razor pages) و سپس مجددا وارد قسمت Blazor Server میشود که ... تجربهی کاربری مطلوبی را به همراه ندارد. علت این خروج و ورود را هم در این مطلب میتوانید مطالعه کنید: «
دستیابی به HttpContext در Blazor Server». هدف این بوده که بتوان با استفاده از HttpContext مهیای در razor pages (و نه توسط اتصال web socket یک برنامهی blazor server)، کوکیهای پس از لاگین موفق را به سمت مرورگر ارسال و ثبت کرد و درگیر مشکلات به همراه دسترسی به HttpContext در برنامههای Blazor server نشد.
راه دیگری هم برای مواجه شدن با این مشکل وجود دارد: حذف قسمت razor pages؛ حذف نیاز به خروج و ورود از برنامهی blazor server و ... استفاده از
ProtectedBrowserStorage که اکنون جزئی از blazor server استاندارد است؛ جهت ثبت اطلاعات user claims و عدم استفاده از کوکیها که نیاز به دسترسی به HttpContext را دارند. اگر علاقمند به مشاهدهی یک مثال کامل در این زمینه هستید، میتوانید به پروژهی «
BlazorServerAuthenticationAndAuthorization » مراجعه کنید. در اینجا یک
CustomAuthenticationStateProvider را به کمک ProtectedSessionStorage طراحی و استفاده کرده تا نیاز به کار با کوکیها برطرف شود و دیگر نیازی به استفاده از razor pages نباشد. البته باید دقت داشت که
SessionStorage محدود به tab جاری است و اگر نیاز است اطلاعات آن در تمام برگههای باز شده در دسترس باشد، بهتر است از Protected
LocalStorage استفاده کرد. همچنین باید دقت داشت که چون این protected storageها برای رمزنگاری خودکار اطلاعات از ASP.NET Core data protection API
استفاده میکنند، نکات مطلب « غیرمعتبر شدن کوکیهای برنامههای ASP.NET Core هاست شدهی در IIS پس از ریاستارت آن » نیز در مورد آنها صادق است.