Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] O login pelo blazor não esta gerando o cookie

Quando eu faço o login pelo projeto web blazor ele não está gerando o cookie

Nessa imagem abaixo mostra que a requisição funciona com retorno 200 Insira aqui a descrição dessa imagem para ajudar na acessibilidade

mas quando eu inspeciono o chrome o cookie não é criado

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

aqui esta o código do CookieHandler


using Microsoft.AspNetCore.Components.WebAssembly.Http;

namespace ScreenSound.Web.Services;

public class CookieHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include);
        return base.SendAsync(request, cancellationToken);
    }
}

e aqui esta o program do projeto blazor

using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using MudBlazor.Services;
using ScreenSound.Web;
using ScreenSound.Web.Services;

var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");

builder.Services.AddMudServices();

builder.Services.AddScoped<CookieHandler>();
builder.Services.AddScoped<ArtistaAPI>();
builder.Services.AddScoped<MusicasAPI>();
builder.Services.AddScoped<AuthAPI>();

builder.Services.AddHttpClient("API", client => {
    client.BaseAddress = new Uri(builder.Configuration["APIServer:Url"]!);
    client.DefaultRequestHeaders.Add("Accept", "application/json");
}).AddHttpMessageHandler<CookieHandler>();

await builder.Build().RunAsync();

este é o meu repositório no github https://github.com/duca-meneses/screen-sound-net8

Esse é o repositório até aula 2.5 Guardando o cookie

1 resposta
solução!

Eu descobri o erro era pq eu não tinha adicionado o endpoint completo no AuthAPI, estava sem o ?useCookies=true

using ScreenSound.Web.Reponse;
using System.Net.Http.Json;

namespace ScreenSound.Web.Services;

public class AuthAPI(IHttpClientFactory factory)
{
    private readonly HttpClient _httpClient = factory.CreateClient("API");

    public async Task<AuthResponse> LoginAsync(string email, string senha)
    {
        var response = await _httpClient.PostAsJsonAsync("auth/login?useCookies=true", new
        {
            email,
            password = senha
        });

        if (response.IsSuccessStatusCode)
        {
            return new AuthResponse { Sucesso = true };
        }
        return new AuthResponse { Sucesso = false, Erros = ["Login/senha iválidos"] };
    }
}