ASP.NET Core 3.1 MVC Identity记住我功能不生效,如何实现登录页自动填充?
问题原因
你混淆了Identity的「Remember Me」功能和浏览器表单自动填充的能力:
- Identity的Remember Me仅负责生成持久化的身份认证Cookie,实现关闭浏览器后再次访问站点无需重新登录的效果,本身不处理表单字段填充逻辑
- 登录页用户名密码自动填充由浏览器基于表单属性和用户保存的密码记录实现
解决步骤
- 第一步:修改脚手架生成的登录页表单属性
打开Areas/Identity/Pages/Account/Login.cshtml,给对应输入框添加autocomplete属性:
用户名输入框:
<input asp-for="Input.Email" class="form-control" autocomplete="username" />
密码输入框:
<input asp-for="Input.Password" class="form-control" autocomplete="current-password" />
记住我复选框可选添加属性:
<input asp-for="Input.RememberMe" autocomplete="on" />
- 第二步:(可选)已登录状态下自动填充用户名
如果用户勾选Remember Me后再次访问站点已经处于登录状态,可在Areas/Identity/Pages/Account/Login.cshtml.cs的OnGetAsync方法中添加赋值逻辑:
public async Task OnGetAsync(string returnUrl = null) { // 新增逻辑:已登录状态直接填充用户名 if (User.Identity.IsAuthenticated) { Input.Email = User.Identity.Name; } // 原有逻辑保留 ReturnUrl = returnUrl; ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); }
- 第三步:(可选)调整认证Cookie有效期
可在ConfigureServices方法中修改Remember Me对应的Cookie生效时长,默认14天:
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>(); // 补充Cookie配置 services.ConfigureApplicationCookie(options => { options.ExpireTimeSpan = TimeSpan.FromDays(30); options.SlidingExpiration = true; });
注意事项
- 首次登录时需在浏览器弹出的「是否保存密码」提示中选择保存,后续才会自动填充
- 需确保浏览器没有禁用密码自动填充功能
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

