如何获取与已登录用户相关的信息?
Posted
技术标签:
【中文标题】如何获取与已登录用户相关的信息?【英文标题】:How do I get information associated with a logged in user? 【发布时间】:2021-10-04 01:40:56 【问题描述】:我遇到了一个我不知道如何解决的问题。我希望能够在视图上显示与我的登录用户关联的项目。我以前做过用户和票证之间的多对多关系。 现在我想创建一个 UserProfile,我可以在其中显示哪些票证连接到登录用户。但是当我不知道如何获取有关您何时登录的紧急信息时会出现问题。我使用 MVC IdentityUser 和 Ef Core。
我已经在这个方向尝试了一些东西
public IActionResult MyProfile(string id)
var Tickets = _db.UserTickets
.Include(n => n.ApplicationUser)
.Include(n => n.Ticket)
.Where(n => n.UserId == id)
.ToList();
return View(Tickets);
【问题讨论】:
这能回答你的问题吗? ASP.NET Core Identity - get current user 【参考方案1】:我一般会写一个扩展方法来获取当前用户id。
public static class ControllerExtensions
public static string GetCurrentUserId(this ControllerBase controller)
try
var userId = controller.User.FindFirstValue(ClaimTypes.NameIdentifier);
return userId;
catch
throw new Exception("Cannot find user id.");
所以,你会这样做:
public class YourController : Controller
public IActionResult MyProfile()
var currentUserId = this.GetCurrentUserId();
var Tickets = _db.UserTickets
.Include(n => n.ApplicationUser)
.Include(n => n.Ticket)
.Where(n => n.UserId == currentUserId)
.ToList();
return View(Tickets);
【讨论】:
【参考方案2】:尝试使用此代码
public async Task getNumberFromUser()
ClaimsPrincipal currentUser = this.User;
var currentUserName = currentUser.Identity.Name.ToString();
ApplicationUser user = await userManager.FindByNameAsync(currentUserName);
【讨论】:
以上是关于如何获取与已登录用户相关的信息?的主要内容,如果未能解决你的问题,请参考以下文章