Quantcast
Channel: Active questions tagged blazor - Stack Overflow
Viewing all articles
Browse latest Browse all 4839

Set HttpContext Response Cookie in Blazor without API

$
0
0

Issue with Auth princliples not being able to write to response in blazor app through an injected service

LoginModal:

@using Microsoft.AspNetCore.Components.Authorization@using MtgDeckBuilderServices@inject NavigationManager Navigation@inject IMtgApiAuthorizationService AuthService@inject IHttpContextAccessor HttpContextAccessor@if (IsOpen){<div class="modal-backdrop fade show"></div><div class="modal show d-block" tabindex="-1"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><h5 class="modal-title">Log In</h5><button type="button" class="btn-close" @onclick="Close"></button></div><div class="modal-body"><div class="mb-3"><label for="username" class="form-label">Username</label><input id="username" class="form-control" @bind="Username" /></div><div class="mb-3"><label for="password" class="form-label">Password</label><input id="password" type="password" class="form-control" @bind="Password" /></div>                    @if (!string.IsNullOrEmpty(ErrorMessage))                    {<div class="alert alert-danger">@ErrorMessage</div>                    }</div><div class="modal-footer"><button class="btn btn-primary" @onclick="Login">Log In</button><button class="btn btn-secondary" @onclick="Close">Cancel</button></div></div></div></div>}@code {    [Parameter] public bool IsOpen { get; set; }    [Parameter] public EventCallback<bool> IsOpenChanged { get; set; }    [Parameter] public EventCallback OnLoginSuccess { get; set; }    private string Username { get; set; }    private string Password { get; set; }    private string ErrorMessage { get; set; }    private async Task Login()    {        ErrorMessage = string.Empty;        var httpContext = HttpContextAccessor.HttpContext;        if (httpContext == null)        {            ErrorMessage = "Unable to access HttpContext.";            return;        }        var result = await AuthService.AuthenticateAndSignInAsync(httpContext, Username, Password);        if (result != null)        {            await IsOpenChanged.InvokeAsync(false);            await OnLoginSuccess.InvokeAsync();        }        else        {            ErrorMessage = "Invalid credentials.";        }    }    private async Task Close()    {        await IsOpenChanged.InvokeAsync(false);    }}

Then in the Auth Service, this is relevant:

public void SetAuthCookie(HttpContext context, string token){    var options = new CookieOptions            {                Expires = DateTimeOffset.UtcNow.AddDays(7),                HttpOnly = true,                IsEssential = true,                Domain = context.Request.Host.Host,                SameSite = SameSiteMode.Strict,                Secure = true            };    #if DEBUG    options.Secure = false;    #endif    try    {        context.Response.Cookies.Append("mtgdb_auth_cookie", token, options);    }    catch (Exception ex)    {    }}public async Task<UserCredential?> AuthenticateAndSignInAsync(HttpContext context, string username, string password){    var userCredential = await AuthenticateAsync(username, password);    if (userCredential == null)        return null;    var token = CreateToken(context, userCredential);    SetAuthCookie(context, token);    userCredential.TokenExpiration = DateTime.UtcNow.AddDays(7).ToString();    userCredential.AuthData = token;    return userCredential;}

Is this possible to do without an API call? Keep in mind this service works perfectly in an .NET Core 8 Web API.

the problem tracks to this: (Response not writable... lmao it hasn't returned yet, what a joke.)context.Response.Cookies.Append("mtgdb_auth_cookie", token, options);


Viewing all articles
Browse latest Browse all 4839

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>