You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:46:09