ASP.NET Identity缺少字段

时间:2014-01-07 12:43:58

标签: asp.net .net asp.net-identity

在新ASP.NET Identity tables下,我看不到某些字段,例如已批准 LastActivity 等...

我们是否使用个人资料并创建自定义代码来管理这些字段?

即。在这?

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        var user = await UserManager.FindAsync(model.UserName, model.Password);
        if (user != null)
        {
            await SignInAsync(user, model.RememberMe);

            // Use profile field and update it... ???      
            user.LastActivity = DateTime.Now;
            UserManager.Update(user);

            return RedirectToLocal(returnUrl);
        }
        else
        {
            ModelState.AddModelError("", "Invalid username or password.");
        }
    }

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

2 个答案:

答案 0 :(得分:2)

根据评论,通过查看代码,您似乎正在进行Model View ViewModel (MVVM)模式。太棒了!

在MVVM模式中,有两种模型。域模型(DM)表示数据库模型,ViewModel(VM)表示视图。 DM包含数据库的所有模式相关数据,VM具有视图的用户验证,错误消息等。因为您的VM没有(或可能不)拥有所有数据库字段。您只需要传递给VM中的用户所需的内容。

您可以根据要求向VM添加更多字段。

答案 1 :(得分:2)

UserManager.FindAsync返回初始化时传递给它的类型。所以在这个例子中,我假设var user = await UserManager.FindAsync(model.UserName, model.Password);中的用户类型是IdentityUser。因此,在AccountController的构造函数中,您将传入UserManager并将其设置为本地属性。您需要将IdentityUser(以及所有相关代码)更改为您自定义配置文件的任何内容。 e.g。

    public class CustomUser : IdentityUser
    {
        public DateTime LastActivityDate { get; set; }
        public bool IsApproved { get; set; }
    }

    public class AccountController : Controller
    {
        public UserManager<CustomUser> UserManager { get; set; }

        public AccountController() : this(new UserManager<CustomUser>(new UserStore<CustomUSer>()))
        {

        }

        public AccountController(UserManager<CustomUser> userManager)
        {
            UserManager = userManager;
        }

        public async Task<ActionResult> Login(LoginViewModel model string returnUrl)
        {
            if (ModelState.IsValid)
            {
                CustomUser user = await UserManager.FindAsync(model.UserName, model.Password);
                //now we have access to the custom fields added.
                user.LastActivityDate = DateTime.Now;
                UserManager.Update(user); // Update DB field
            }
        }
    }