如何在ASP.NET Core 6中更新AspNetUsers表的LastLogin字段
解决ASP.NET Core 6 Identity登录时LastLogin字段不更新的问题
默认ASP.NET Core Identity不会自动更新自定义的LastLogin字段,需要手动在登录成功后添加更新逻辑,具体步骤如下:
1. 确认用户实体包含LastLogin属性
确保你的自定义用户类(通常是ApplicationUser)已经定义了LastLogin字段:
public class ApplicationUser : IdentityUser { public DateTime LastLogin { get; set; } }
如果是新增的字段,需要执行迁移更新数据库:
Add-Migration AddLastLoginField Update-Database
2. 在Login页面注入UserManager
在Login.cshtml.cs的构造函数中注入UserManager<ApplicationUser>,用于后续更新用户信息:
private readonly SignInManager<ApplicationUser> _signInManager; private readonly ILogger<LoginModel> _logger; private readonly UserManager<ApplicationUser> _userManager; public LoginModel(SignInManager<ApplicationUser> signInManager, ILogger<LoginModel> logger, UserManager<ApplicationUser> userManager) { _signInManager = signInManager; _logger = logger; _userManager = userManager; }
3. 登录成功后更新LastLogin字段
修改登录成功分支的代码,获取当前用户并更新LastLogin为当前时间,再保存到数据库:
var result = await _signInManager.PasswordSignInAsync(user.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true); if (result.Succeeded) { var currentUser = await _userManager.FindByEmailAsync(user.Email); if (currentUser != null) { currentUser.LastLogin = DateTime.UtcNow; // 推荐使用UTC时间,避免时区问题 await _userManager.UpdateAsync(currentUser); } _logger.LogInformation("User logged in."); return Redirect(URL); }
这样用户每次登录成功后,AspNetUsers表中的LastLogin字段就会被更新为当前登录时间。
内容的提问来源于stack exchange,提问作者Massey
相关产品推荐
相关产品推荐

