Я новичок в ядре ASP.NET и разрабатываю веб-сайт (ядро .NET 2.1) с логином пользователя.
Я хотел бы иметь возможность отображать изображение аватара пользователя на всех страницах, которые используют_Layout.cshtml. Итак, внутри этого файла для имени пользователя, которое я уже использую: @User.Identity.Name
. Теперь я хотел бы использовать что-то вроде этого: @User.Claims.First("avatar")
Я использую аутентификацию на основе файлов cookie:
В моих файлах "Startup.cs":
public void ConfigureServices(IServiceCollection services) {
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// support for cookie based authentication
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options => {
options.Cookie.HttpOnly = true;
options.LoginPath = "/Account/Login";
});
}
Вмой "AccountController":
[HttpPost]
public async Task<IActionResult> Login(LoginModel m) {
var user = Authenticate(m.Email, m.Password); // returns null when authentication fails
if (user!=null) {
var userIdentity = new ClaimsIdentity(
new List<Claim> {
new Claim(ClaimTypes.Name, user.Company.Name),
new Claim(ClaimTypes.Email, user.Email)
}, "login");
ClaimsPrincipal principal = new ClaimsPrincipal(userIdentity);
await HttpContext.SignInAsync(principal);
return Redirect("/"); // redirect after authentication
}
return View("Login"); // default view if cannot authenticate
}
Изображение аватара будет храниться в базе данных Firebase, поэтому мне нужно избегать запросов к базе данных для каждого запроса страницы моего сайта.
С тех пор"используются для правил авторизации, я не думаю, что должен использовать это для хранения" маленького "байтового массива, который я могу использовать для рендеринга изображения JPG. Поскольку я показываю его на каждой странице во время сеанса пользователя, я хочу загрузить изображение в оперативную память сервера во время входа в систему и сделать так, чтобы оно оставалось там до тех пор, пока пользователь остается в системе.
I 'Мы нашли много примеров, когда люди расширяют класс ClaimsPrincipal для добавления новых свойств, но это требует некоторого другого изменения кода (похоже, связано с IdentityModel с использованием каркаса сущностей) и фабрики для объектов ClaimsPrincipal. (Если мне нужно пойти по этому пути, я бы хотел небольшой пример, начиная с кода, который я предоставил)
Вспоминая, что я новичок в ASP.NET core MVC ... Если кто-то может указать мне на хорошийНаправление я был бы признателен.