Как добавить дополнительную информацию в IdentityUser и расширить методы UserManager - PullRequest
0 голосов
/ 01 июня 2018

Я использую класс Asp.net mvc IdentityUser для хранения пользователей в моем приложении.В базе данных есть таблица AspNetUsers, и все пользователи не имеют электронной почты.Но теперь мне нужно было добавить дополнительную информацию о клиентах в класс ApplicationUser.Теперь на пользователях с электронной почтой могут быть как клиенты А, так и клиенты Б с одинаковыми адресами электронной почты

Мой класс ApplicationUser выглядит следующим образом:

public class ApplicationUser : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }

    public Customer Customer { get; set; }
    [Required]
    public int CustomerId { get; set; }
}

Но я не смог найти способ расширить UserManager и изменить методы по мере необходимости.

public async System.Threading.Tasks.Task<bool> AddAccount(string email, int customerId)
{
    // Asp.net User
    var user = await UserManager.FindByEmailAsync(email);
    string password = Membership.GeneratePassword(5, 1);
    if (user == null)
    {
        user = new ApplicationUser { UserName = email, Email = email, CustomerId = customerId };
        var result = await UserManager.CreateAsync(user, password);
        if (!result.Succeeded)
        {
            return false;
        }
    }

    return true;
}

Мне нужно расширить метод FindByEmailAsync, чтобы он не только принимал параметр электронной почты, но также принимал CustomerId в качестве параметра.

Мне нужен FindByEmail (string email, int customerId) ия не знаю как это сделать?

1 Ответ

0 голосов
/ 01 июня 2018

Если вы хотите сделать это, вы должны создать MyUserManager, который наследуется от UserManager.Затем добавьте метод FindByEmailAndId([your params]).

Вот так:

public class MyUserManager<TUser> : UserManager<TUser>
{
    public async Task<TUser> FindByEmailAsync(string email, int customerId)
    {
        //your code.
    }
}

Но я не понимаю, почему?если вы создаете пользователя, один или два из ваших параметров должны быть уникальными.тогда почему бы не использовать этот параметр?

...