Так что я пытаюсь провести минимальное тестирование. Я создал новый проект (BlazorApp1), используя шаблон Blazor Web App, с примерами файлов. /counter.
Я пытаюсь сделать его на шаг, создавая услугу, которая работает в любое время, когда пользователь обращается к сайту (для инициализации пользовательских данных). < /p>
userservice.cs:
public class UserService
{
public AuthenticationStateProvider AuthenticationStateProvider { get; set; }
private IHttpContextAccessor HttpContextAccessor { get; set; }
public UserInfo User = new();
private bool _initalized = false;
public UserService(AuthenticationStateProvider _AuthenticationStateProvider, IHttpContextAccessor _HttpContextAccessor)
{
AuthenticationStateProvider = _AuthenticationStateProvider;
HttpContextAccessor = _HttpContextAccessor;
}
public async Task InitUser()
{
if(_initalized)
return;
var userAuth = await authenticationStateProvider.GetAuthenticationStateAsync();
User.Email = userAuth.User.Claims.FirstOrDefault(x => x.Type == "EmailAddress")?.Value;
using(var db = new dbContext())
{
var DbRoles = db.access_control!.FirstOrDefault(x => x.email == User.Email);
if (DbRoles is not null)
{
User.Roles = DbRoles.roles;
}
}
ClaimsIdentity id = new();
if (User.Roles is null)
{
id.AddClaim(new Claim(ClaimTypes.Role, "None"));
}
else
{
foreach (var role in User.Roles)
{
id.AddClaim(new Claim(ClaimTypes.Role, role));
}
}
userAuth.User.AddIdentity(id);
_initalized = true;
}
public class UserInfo
{
public string? Email { get; set; }
public List? Roles { get; set; }
}
}
< /code>
program.cs:
using BlazorApp1.Client.Pages;
using BlazorApp1.Components;
using BlazorApp1.Components.User;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Components.Server.Circuits;
using Sustainsys.Saml2;
using Sustainsys.Saml2.AspNetCore2;
using Sustainsys.Saml2.Metadata;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents()
.AddInteractiveWebAssemblyComponents();
builder.Services.Configure(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
options.Secure = CookieSecurePolicy.SameAsRequest;
options.HttpOnly = Microsoft.AspNetCore.CookiePolicy.HttpOnlyPolicy.Always; // Enable HttpOnly for cookies
});
builder.Services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = Saml2Defaults.Scheme;
}).AddCookie()
.AddSaml2();
builder.Services.AddAuthorization(options =>
{
// By default, all incoming requests will be authorized according to the default policy
options.FallbackPolicy = options.DefaultPolicy;
});
// Add services to the container.
builder.Services.AddSignalR();
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
builder.Services.AddHttpClient();
builder.Services.AddHttpContextAccessor();
builder.Services.AddScoped();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseWebAssemblyDebugging();
}
else
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAntiforgery();
app.UseAuthentication();
app.UseAuthorization();
app.MapRazorComponents()
.AddInteractiveServerRenderMode()
.AddInteractiveWebAssemblyRenderMode()
.AddAdditionalAssemblies(typeof(BlazorApp1.Client._Imports).Assembly);
app.Run();
< /code>
app.razor:
@using BlazorApp1.Components.User
@inject UserService UserService
@code
{
private bool _initalized = false;
protected override async Task OnInitializedAsync()
{
if (!_initalized)
{
await UserService.InitUser();
_initalized = true;
}
}
}
< /code>
Самая большая проблема, с которой я сталкиваюсь с этим кодом, заключается в том, что, когда я меняю страницы, используя образец Navmenu, пользовательский сервис всегда поврежден. Поражает цель Blazor United и, по сути, просто изменяет его на сервер Blazor, поскольку компоненты больше не смогут быть отображаются в InteractiveWebassembly. < /p>
Примечания: < /p>
Мы используем SAML SSO для аутентификации, но управляйте контролем доступа через DataBase (hence hence) < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < /> < /> < />. Включите код, который был бы актуальным и удаленным/отредактировал все, что не дает значительного понимания.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... rid-webapp
Создание Scoped Service для инициализации пользователя в Blazor United (Hybrid WebApp) ⇐ C#
Место общения программистов C#
1755526333
Anonymous
Так что я пытаюсь провести минимальное тестирование. Я создал новый проект (BlazorApp1), используя шаблон Blazor Web App, с примерами файлов. /counter.
Я пытаюсь сделать его на шаг, создавая услугу, которая работает в любое время, когда пользователь обращается к сайту (для инициализации пользовательских данных). < /p>
userservice.cs:
public class UserService
{
public AuthenticationStateProvider AuthenticationStateProvider { get; set; }
private IHttpContextAccessor HttpContextAccessor { get; set; }
public UserInfo User = new();
private bool _initalized = false;
public UserService(AuthenticationStateProvider _AuthenticationStateProvider, IHttpContextAccessor _HttpContextAccessor)
{
AuthenticationStateProvider = _AuthenticationStateProvider;
HttpContextAccessor = _HttpContextAccessor;
}
public async Task InitUser()
{
if(_initalized)
return;
var userAuth = await authenticationStateProvider.GetAuthenticationStateAsync();
User.Email = userAuth.User.Claims.FirstOrDefault(x => x.Type == "EmailAddress")?.Value;
using(var db = new dbContext())
{
var DbRoles = db.access_control!.FirstOrDefault(x => x.email == User.Email);
if (DbRoles is not null)
{
User.Roles = DbRoles.roles;
}
}
ClaimsIdentity id = new();
if (User.Roles is null)
{
id.AddClaim(new Claim(ClaimTypes.Role, "None"));
}
else
{
foreach (var role in User.Roles)
{
id.AddClaim(new Claim(ClaimTypes.Role, role));
}
}
userAuth.User.AddIdentity(id);
_initalized = true;
}
public class UserInfo
{
public string? Email { get; set; }
public List? Roles { get; set; }
}
}
< /code>
program.cs:
using BlazorApp1.Client.Pages;
using BlazorApp1.Components;
using BlazorApp1.Components.User;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Components.Server.Circuits;
using Sustainsys.Saml2;
using Sustainsys.Saml2.AspNetCore2;
using Sustainsys.Saml2.Metadata;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents()
.AddInteractiveWebAssemblyComponents();
builder.Services.Configure(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
options.Secure = CookieSecurePolicy.SameAsRequest;
options.HttpOnly = Microsoft.AspNetCore.CookiePolicy.HttpOnlyPolicy.Always; // Enable HttpOnly for cookies
});
builder.Services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = Saml2Defaults.Scheme;
}).AddCookie()
.AddSaml2();
builder.Services.AddAuthorization(options =>
{
// By default, all incoming requests will be authorized according to the default policy
options.FallbackPolicy = options.DefaultPolicy;
});
// Add services to the container.
builder.Services.AddSignalR();
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
builder.Services.AddHttpClient();
builder.Services.AddHttpContextAccessor();
builder.Services.AddScoped();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseWebAssemblyDebugging();
}
else
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAntiforgery();
app.UseAuthentication();
app.UseAuthorization();
app.MapRazorComponents()
.AddInteractiveServerRenderMode()
.AddInteractiveWebAssemblyRenderMode()
.AddAdditionalAssemblies(typeof(BlazorApp1.Client._Imports).Assembly);
app.Run();
< /code>
app.razor:
@using BlazorApp1.Components.User
@inject UserService UserService
@code
{
private bool _initalized = false;
protected override async Task OnInitializedAsync()
{
if (!_initalized)
{
await UserService.InitUser();
_initalized = true;
}
}
}
< /code>
Самая большая проблема, с которой я сталкиваюсь с этим кодом, заключается в том, что, когда я меняю страницы, используя образец Navmenu, пользовательский сервис всегда поврежден. Поражает цель Blazor United и, по сути, просто изменяет его на сервер Blazor, поскольку компоненты больше не смогут быть отображаются в InteractiveWebassembly. < /p>
Примечания: < /p>
Мы используем SAML SSO для аутентификации, но управляйте контролем доступа через DataBase (hence hence) < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < / /> < /> < /> < />. Включите код, который был бы актуальным и удаленным/отредактировал все, что не дает значительного понимания.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79735832/creating-scoped-service-for-user-initialization-in-blazor-united-hybrid-webapp[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия