Spaces:
Sleeping
Sleeping
File size: 2,729 Bytes
6f32ae8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | using System.Net.Http.Json;
using Blazored.LocalStorage;
using LibraryManagement.Shared.Models;
using BlazorWebAssembly.Providers;
using Microsoft.AspNetCore.Components.Authorization;
namespace BlazorWebAssembly.Services
{
public class AuthService
{
private readonly HttpClient _httpClient;
private readonly ILocalStorageService _localStorage;
private readonly AuthenticationStateProvider _authStateProvider;
public AuthService(HttpClient httpClient, ILocalStorageService localStorage, AuthenticationStateProvider authStateProvider)
{
_httpClient = httpClient;
_localStorage = localStorage;
_authStateProvider = authStateProvider;
}
public async Task<bool> LoginAsync(LoginRequest request)
{
var response = await _httpClient.PostAsJsonAsync("api/auth/login", request);
if (!response.IsSuccessStatusCode)
return false;
var authResponse = await response.Content.ReadFromJsonAsync<AuthResponse>();
if (authResponse != null)
{
await _localStorage.SetItemAsync("authToken", authResponse.Token);
((JwtAuthenticationStateProvider)_authStateProvider).NotifyUserAuthentication(authResponse.Token);
_httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", authResponse.Token);
return true;
}
return false;
}
public async Task<bool> RegisterAsync(RegisterRequest request)
{
var response = await _httpClient.PostAsJsonAsync("api/auth/register", request);
if (!response.IsSuccessStatusCode)
return false;
var authResponse = await response.Content.ReadFromJsonAsync<AuthResponse>();
if (authResponse != null)
{
// Auto login after registration
await _localStorage.SetItemAsync("authToken", authResponse.Token);
((JwtAuthenticationStateProvider)_authStateProvider).NotifyUserAuthentication(authResponse.Token);
_httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", authResponse.Token);
return true;
}
return false;
}
public async Task Logout()
{
await _localStorage.RemoveItemAsync("authToken");
((JwtAuthenticationStateProvider)_authStateProvider).NotifyUserLogout();
_httpClient.DefaultRequestHeaders.Authorization = null;
}
}
}
|