Komponent autoryzacji w Blazorze

0

Cześć, próbuje wdrożyć autoryzacje i autentykacje do swojego projektu w blazorze server app. W dużej części mi się to udaje, za sprawą dobrej dokumentacji, ale mam pewien problem, którego przeskoczenie wydaje mi się za trudne. Mianowicie do istniejącego projektu w blazor przy pomocy narzędzia scaffolding dodałem komponent Identity, logowanie, autentykacja i statyczna autoryzacja śmiga. Mam problem z obsługą usera niezalogowanego, który klika w jakiegoś buttona i gdyby wszystko byłoby poprawnie wykonane to po kliknięciu powinien być przekierowany do /authetincation/login celem zalogowania, a potem za sprawą returnUrl i escapedatastring w adresie powinien wrócić na stronę, której odnośnik wcześniej kliknął.

Teraz gdy klikam w odnośnik do strony, co do której anonymous jest nie autentykowany to na dole w przeglądarce pojawia się pasek z informacją o wystąpieniu wyjątku, a w konsoli taki babol.
screenshot-20211031221023.png

Na stronie docelowej jest dodany na górze wpis @attribute [Authorize]

Kod RedirectToLogin.razor:

@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateTo(
            $"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
    }
}

Linijki z Startup.cs

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<MainAppContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));
            services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = false)
                .AddRoles<IdentityRole>()
    .AddEntityFrameworkStores<MainAppContext>();
            services.AddScoped<AuthenticationStateProvider, RevalidatingIdentityAuthenticationStateProvider<IdentityUser>>();
            services.AddRazorPages();
            services.AddServerSideBlazor(); 
0

Ten AuthenticationService to jest coś Twojego co wstrzykujesz do któregoś komponentu? Nie kojarzę takiego serwisu w Identity ale mogę się mylić. Jeśli to Twój customowy serwis to musisz to zarejestrować w Startup.cs., np:

services.AddScoped<AuthenticationService>

1

@Aventus: nie znam szczegółów, ale problemem okazał się komponent redirectToLogi.razor, który był niewłaściwie renderowany z atrybutem adresu Url.

Sposób poniższy działa aż miło:

@inject NavigationManager NavigationManager

@code{
  [Parameter]
  public string ReturnUrl {get; set;}
  protected override  void OnInitialized()
  {
        ReturnUrl = "~/" + ReturnUrl;
        NavigationManager.NavigateTo($"Identity/Account/Login?returnUrl={ReturnUrl}", 
           forceLoad:true);
  }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1