在新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 添加更多字段。