我正在将ASP.NET Core与Identity和Entity Framework Core一起使用。 如何检索属于经过身份验证的用户的宠物?
[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
对象是否应该包含类型为string
的“ PetOwner”属性,该属性包含与User.Identity.Name
进行比较的电子邮件地址?
还是我应该从IdentityUser
获取一个UserManager
对象,并对此采取措施?也许是Id
属性?我是否应该有一个扩展了ApplicationUser
的{{1}}对象?
答案 0 :(得分:1)
我应该有一个扩展IdentityUser的ApplicationUser对象吗?
是的!您的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();