Komponent autoryzacji w Blazorze

Komponent autoryzacji w Blazorze
Damian Pawelec
  • Rejestracja:prawie 4 lata
  • Ostatnio:ponad rok
  • Postów:22
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:

Kopiuj
@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

Kopiuj
        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(); 
edytowany 4x, ostatnio: Damian Pawelec
Aventus
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:UK
  • Postów:2235
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>


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
Damian Pawelec
  • Rejestracja:prawie 4 lata
  • Ostatnio:ponad rok
  • Postów:22
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:

Kopiuj
@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);
  }
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.