首页 > 解决方案 > 如何在 ApplicationUser 中设置数据?

问题描述

MyApplicationUser扩展了一个虚拟UserData类,例如

public partial class ApplicationUser : IdentityUser
{
  [IgnoreDataMember, NotMapped]
  public IEnumerable<UserData> UserData { get; set; }
}

如何设置UserData用户何时登录我的应用程序?

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
     var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
     if (result.Succeeded)
     {
         var user = _context.Users.Where(x => x.Email == Input.Email).FirstOrDefault();
         using (myContext myContext = new myContext())
         {
               user.UserData = myContext.UserData.Where(x => x.UserId == user.Id);
         }
     }
}

这样UserData就可以在我的控制器上进行依赖注入了吗?(我在上面的用户变量中设置了数据,用于演示)

不幸的是,UserData通过设置identity.AddClaim不是一个选项,并且不建议在会话中设置此类值

标签: c#asp.net-mvc

解决方案


你可以尝试这样的事情:

public async Task<ActionResult> Login(string username, int id)
{
    // get by username
    ApplicationUser user = UserManager.FindByName(username);

    // get by user id
    ApplicationUser user = db.Users.Find(id);

    // get current user
    ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext()
        .GetUserManager<ApplicationUserManager>().FindById(Convert
        .ToInt32(System.Web.HttpContext.Current.User.Identity.GetUserId()));

    // and some other useful methods        
    if (user == null)
    {
        // creating user 
        user = new ApplicationUser();

        // fill in the user properties 
        user.UserName = "johnny";
        user.Name = "Johnny English";
        //...
        var result = UserManager.Create(user);

        // set default user group and roles
        var defaultGroup = "xxxx-yyyy-zzzz-tttt"; // Id of the ApplicationGroup
        groupManager.SetUserGroups(user.Id, new string[] { defaultGroup });
        groupManager.SetGroupRoles(newGroup.Id, new string[] { role.Name });
    }
}

希望这可以帮助。


推荐阅读