【问题标题】:Get IdentityUser by ID using MVC 5 Identity使用 MVC 5 Identity 按 ID 获取 IdentityUser
【发布时间】:2015-07-30 16:36:42
【问题描述】:

创建另一个模型Testimonial 时,我将活动用户的Id 存储为Author,它是一个类似于:00b9c6aa-010c-4cbd-ac16-c72d05e7906a 的字符串。在另一个视图中,我想为每个Testimonial 显示与Id 关联的名称和其他用户信息。该视图将包含来自许多不同用户的信息,而不仅仅是主动登录的用户。我不知道如何通过Id 获取用户的信息。

如何通过Id 获得IdentityUser

所有包含用户的表都是默认的,外加一些额外的列。在名为AspNetUsers 的表中,我有IdFirstNameEmail 等。Id 是键值,我想知道如何(在Testimonial 的控制器中) 检索给定Id 的信息。

【问题讨论】:

  • 我假设您已经扩展了 MVC 项目模板生成的默认上下文?您是否创建了新表 - 如果是,请添加到问题中。
  • 我已附加问题。
  • 是的,但是您创建了一个 Testimonial 表,其中包含创建它的用户的 Id。这是作为ApplicationUser 表的外键完成的吗?
  • 没有。我是 ASP.Net 和 SQL 的新手。如果我将其更改为外键,是否有一种简单的方法可以获取每个用户的信息?
  • 是的 - 您将能够查询Testimonial 表,并在单个数据库操作中检索相关的用户详细信息。你如何查询你的Testimonial 表?是通过实体框架吗?

标签: c# asp.net-mvc asp.net-mvc-5 asp.net-identity-2


【解决方案1】:

IdentityConfig.cs // 配置此应用程序中使用的应用程序用户管理器。 UserManager 在 ASP.NET Identity 中定义并由应用程序使用。

public class ApplicationUserManager : UserManager<ApplicationUser>
{
    public ApplicationUserManager(IUserStore<ApplicationUser> store)
        : base(store)
    {
    }

    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
    {
        var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
        // Configure validation logic for usernames
        manager.UserValidator = new UserValidator<ApplicationUser>(manager)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };
        // Configure validation logic for passwords
        manager.PasswordValidator = new PasswordValidator
        {
            RequiredLength = 6,
            RequireNonLetterOrDigit = false,
            RequireDigit = false,
            RequireLowercase = false,
            RequireUppercase = false,
        };
        manager.EmailService = new EmailService();
        var dataProtectionProvider = options.DataProtectionProvider;
        if (dataProtectionProvider != null)
        {
            manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
        }
        return manager;
    }
}
public class ApplicationSignInManager : SignInManager<ApplicationUser, string>
{
    public ApplicationSignInManager(ApplicationUserManager userManager, IAuthenticationManager authenticationManager) :
        base(userManager, authenticationManager) { }

    public override Task<ClaimsIdentity> CreateUserIdentityAsync(ApplicationUser user)
    {
        return user.GenerateUserIdentityAsync((ApplicationUserManager)UserManager);
    }

    public static ApplicationSignInManager Create(IdentityFactoryOptions<ApplicationSignInManager> options, IOwinContext context)
    {
        return new ApplicationSignInManager(context.GetUserManager<ApplicationUserManager>(), context.Authentication);
    }
}

在您的控制器中定义以下属性

    private ApplicationUserManager _userManager;
    public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
        }
        private set
        {
            _userManager = value;
        }
    }
    private ApplicationSignInManager _signInManager;

    public ApplicationSignInManager SignInManager
    {
        get
        {
            return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
        }
        private set { _signInManager = value; }
    }

可以在控制器中使用以下方法

var user = await UserManager.FindByIdAsync("00b9c6aa-010c-4cbd-ac16-c72d05e7906a");

你可以像下面这样获取登录用户

var user = await UserManager.FindByIdAsync(await SignInManager.GetVerifiedUserIdAsync());

【讨论】:

  • 这只会获取登录用户。我相信张贴者想要获取与其他表中的记录相关的用户详细信息。
  • var user = await UserManager.FindByIdAsync("00b9c6aa-010c-4cbd-ac16-c72d05e7906a");与任何用户 ID 一起工作,而 var user = await UserManager.FindByIdAsync(await SignInManager.GetVerifiedUserIdAsync());仅用于登录用户。
猜你喜欢
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 2018-11-16
  • 2014-06-01
  • 1970-01-01
  • 2015-03-12
相关资源
最近更新 更多