-
Notifications
You must be signed in to change notification settings - Fork 521
/
Copy pathBlogAuthenticationStateProvider.cs
35 lines (31 loc) · 1.19 KB
/
BlogAuthenticationStateProvider.cs
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
using Blogifier.Shared;
using Microsoft.AspNetCore.Components.Authorization;
using System.Net.Http;
using System.Net.Http.Json;
using System.Security.Claims;
using System.Threading.Tasks;
using System;
namespace Blogifier.Admin
{
public class BlogAuthenticationStateProvider : AuthenticationStateProvider
{
private readonly HttpClient _httpClient;
public BlogAuthenticationStateProvider(HttpClient httpClient)
{
_httpClient = httpClient;
}
public override async Task<AuthenticationState> GetAuthenticationStateAsync()
{
Author author = await _httpClient.GetFromJsonAsync<Author>("api/author/getcurrent");
if (author != null && author.Email != null && author.IsAdmin)
{
var claim = new Claim(ClaimTypes.Name, author.Email);
var claimsIdentity = new ClaimsIdentity(new[] { claim }, "serverAuth");
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
return new AuthenticationState(claimsPrincipal);
}
else
return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity()));
}
}
}