Получить записи, которые принадлежат аутентифицированному пользователю - PullRequest
1 голос
/ 09 апреля 2019

Я использую ASP.NET Core с ядром Identity и Entity Framework.Как получить домашних животных, принадлежащих аутентифицированному пользователю?

[Authorize]
public class HomeController : Controller
{
    private readonly PetContext _context;

    public HomeController(PetContext context)
    {
        _context = context;
    }

    public IActionResult Index()
    {
        // User.Identity.IsAuthenticated -> true
        // User.Identity.Name --> bob@example.com

        ViewData.Model = _context.Pets.Where(pet => /* ...? */);

        return View();
    }
}

Предполагается, что объект Pets содержит свойство "PetOwner" типа string, которое содержит адрес электронной почты, который сравнивается сUser.Identity.Name?

Или я должен получить IdentityUser объект из UserManager и что-то с этим сделать?Может быть, свойство Id?Должен ли я иметь ApplicationUser объект, который расширяет IdentityUser?

1 Ответ

1 голос
/ 09 апреля 2019

Должен ли я иметь объект ApplicationUser, который расширяет IdentityUser?

Да!Ваши классы ApplicationUser и Pet должны быть следующими:

public class ApplicationUser : IdentityUser
{
   public List<Pet> Pets {get; set;}
}

public class Pet
{
   public int PetId {get; set;}
   ........

   public string UserId {get; set;}
   public ApplicationUser User {get; set;}
}

Затем обновите свою регистрацию личности в Startup.ConfigureServices следующим образом:

services.AddDefaultIdentity<ApplicationUser>() //<-- Replace `IdentityUser` with `ApplicationUser` 
    .AddEntityFrameworkStores<AppliclationDbContext>()
    .AddDefaultTokenProviders();

Тогда ваш запрос должен бытьследует:

var loggedInUserId = HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
List<Pet> userPets =  _context.Pets.Where(pet => pet.UserId == loggedInUserId).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...