Как можно переопределить атрибут ProtectedPersonalData UserName в ASP.NET Core Identity?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как можно переопределить атрибут ProtectedPersonalData UserName в ASP.NET Core Identity?

Сообщение Anonymous »

Я использую ASP.NET Core Identity в проекте Blazor. Я хотел бы зашифровать личные данные пользователя, однако я не хочу шифровать имя пользователя. Я планирую использовать имя пользователя в качестве идентификатора учетной записи, а не имени пользователя. Вместо этого имя пользователя будет храниться вне класса IdentityUser и шифроваться отдельно с использованием другого механизма шифрования. Этот идентификатор учетной записи, который будет храниться в UserName, должен быть запоминающимся, но не содержать данных, позволяющих идентифицировать пользователя, поэтому его не нужно будет шифровать, он будет похож на любой обычный идентификатор входа. Я надеюсь, что, не шифруя идентификатор этой учетной записи, пользователь сможет восстановить свою учетную запись в определенных сценариях.
Мне не удалось переопределить ProtectedPersonalData атрибут UserName.
Я добавил класс LookupProtector, реализующий ILookupProtector и LookupProtectorKeyRing, реализующий ILookupProtectorKeyRing >.
Я добавил класс ApplicationUser, который наследуется от IdentityUser, и присвоил ему свойство UserName без свойства ProtectedPersonalData атрибут …

Код: Выделить всё

public class ApplicationUser : IdentityUser
{
/// 
/// Gets or sets the user name for this user.
/// 
public override string UserName { get; set; } = null!;
}
Я изменил ApplicationDbContext, чтобы использовать ApplicationUser в качестве общего типа…

Код: Выделить всё

    public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions options)
: base(options)
{
}
Я изменил вызов AddDefaultIdentity, чтобы он ссылался на ApplicationUser вместо IdentityUser, и добавил вызов AddPersonalDataProtection с общим типы для LookupProtector и LookupProtectorKeyRing ...

Код: Выделить всё

builder.Services.AddDefaultIdentity(options =>
{
options.SignIn.RequireConfirmedAccount = true;
options.User.RequireUniqueEmail = true;
options.Stores.ProtectPersonalData = true;
}).AddRoles()
.AddEntityFrameworkStores()
.AddPersonalDataProtection();
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddScoped();
Я заменил все остальные ссылки на IdentityUser в своем коде на ApplicationUser, например экземпляры UserManager и SignInManager используйте ApplicationUser в качестве общего типа вместо IdentityUser ...

Код: Выделить всё

@inject SignInManager SignInManager
@inject UserManager UserManager
Я попробовал создать класс User на случай, если он будет делать что-то, отличное от того, что я делал вручную. Мне нужно было нажать «+», затем вручную ввести имя ApplicationDbContext, а также проверить нежелательный файл «Account/Lockout», чтобы продолжить работу, но даже тогда это не удалось из-за ошибки сборки, хотя мой код отлично собирается с обычной сборкой. Ошибка сборки: «Произошла ошибка при запуске выбранного генератора кода: не удалось скомпилировать проект в памяти».
Настройки Scaffold:
Изображение

Я также удалил существующую базу данных, откатил все миграции (включая исходную миграцию удостоверений) а затем добавил одну новую миграцию для всех моделей, созданных на сегодняшний день с помощью этих команд…

Код: Выделить всё

dotnet ef database drop
dotnet ef migrations remove (multiple calls)
dotnet ef migrations add CreateTables
dotnet ef database update
Однако теперь, когда я регистрирую пользователя, я вижу, что метод LookupProtector.Protect вызывается с данными, которые кажутся полученными из имени пользователя или NormalizedUserName
code>.
Можно ли переопределить защищенное поведение по умолчанию в классе, производном от IdentityUser, или мне просто нужно найти способ работать со значениями по умолчанию? Спасибо за любую помощь, которую вы можете предложить.
Я мог бы попытаться обойти эту проблему, добавив свойство UserId в ApplicationUser и попытавшись оставить имя пользователя в основном игнорируется, но я хотел бы найти решение, которое кажется более «правильным», если смогу.

Подробнее здесь: https://stackoverflow.com/questions/784 ... p-net-core
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • В чем разница между request.GET.get('username') и request.META.get('HTTP_X_ USERNAME') в DRF
    Anonymous » » в форуме Python
    0 Ответы
    151 Просмотры
    Последнее сообщение Anonymous
  • Как можно добавить исходные данные ASP.NET Core Identity с помощью UseSeeding в EF Core 9?
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как можно добавить начальные данные ASP.NET Core Identity с помощью UseSeeding в EF Core 9?
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»