如何获取与已登录用户相关的信息?

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);


【讨论】:

以上是关于如何获取与已登录用户相关的信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取其他系统登录的用户信息

微信企业号 获取用户信息

微信企业号 获取用户信息

如何获取用户是不是登录的最新信息?

如何获取登录用户 SpringSecurity + AngularJS 的用户信息

spring-如何优雅的获取登录用户信息