在新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);
}
答案 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
}
}
}