ASP.NET 标识缺失字段



在新ASP.NET Identity tables下,我看不到某些字段,即已批准最后活动等...

我们是否使用配置文件并创建自定义代码来管理这些字段?

即在这里 ?

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

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

    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
            }
        }
    }

根据注释,通过查看代码,您似乎正在执行模型视图视图模型(MVVM)模式。真棒!

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

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

相关内容

  • 没有找到相关文章

最新更新