扩展UserManager以允许管理新用户数据?

时间:2017-01-30 08:19:35

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

ASPNET Identity中的UserManager包含AddPasswordAsyncSetPhoneNumberAsync等函数。

我添加了FirstName和LastName的属性,当我注册用户时,我没有设置任何值,因此我想添加屏幕来管理这些值(设置和更改它们)。

如何扩展UserManager以添加像AddNamesAsync这样的功能?

当我们评估ManageController操作时,这样的功能变得如此:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> SetPassword(SetPasswordViewModel model)
{
    if (ModelState.IsValid)
    {
        var result = await UserManager.AddPasswordAsync(User.Identity.GetUserId(), model.NewPassword);
        if (result.Succeeded)
        {
            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
            if (user != null)
            {
                await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
            }
            return RedirectToAction("Index", new { Message = ManageMessageId.SetPasswordSuccess });
        }
        AddErrors(result);
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

按照相同的逻辑,我想按如下方式向控制器添加一个功能:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> SetNames(SetUserFullNamesViewModel model)
{
    if (ModelState.IsValid)
    {
        var result = await UserManager.AddNamesAsync(User.Identity.GetUserId(), model.FirstName, model.LastName);
        if (result.Succeeded)
        {
            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

            return RedirectToAction("Index", new { Message = ManageMessageId.SetNamesSuccess });
        }
        AddErrors(result);
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

如何向UserManager添加功能或扩展UserManager,以便我可以添加允许我更新添加和更新用户自定义属性值的功能?

1 个答案:

答案 0 :(得分:3)

首先将custom columns添加到AppliicationUser

然后您可以像这样更新custom columns

[HttpPost]
public async Task<ActionResult> SetNames(SetUserFullNamesViewModel model)
{
    ApplicationUser usermodel = UserManager.FindById(user.Id);
    usermodel.Name = model.Name;
    usermodel.Surname = model.Surname;


    IdentityResult result = await UserManager.UpdateAsync(usermodel);
    if (result.Succeeded)
    {
        return RedirectToAction("ListUser", "User");
    }

    return View();
}