检索属于经过身份验证的用户的条目



我正在使用 ASP.NET Core与Identity and 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进行比较的电子邮件地址?

还是我应该从UserManager那里得到一个IdentityUser对象并用它做点什么?也许是Id属性?我应该有一个扩展IdentityUserApplicationUser对象吗?

我应该有一个扩展 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();

相关内容

  • 没有找到相关文章

最新更新