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

.NET 6 MVC中Asp.net Identity登录成功后仍重定向至登录页

问题诊断与解决方案

核心问题分析

导致登录成功后重定向回登录页的原因主要有以下几点:

1. 账号未满足"已确认"要求

你在AddDefaultIdentity中设置了options.SignIn.RequireConfirmedAccount = true,这意味着只有邮箱已确认的账号才能访问受保护资源(你的HomeController加了[Authorize]特性)。如果你的账号未确认(数据库AspNetUsers表中EmailConfirmed字段为false),即使登录验证通过,Identity也会拦截请求并重定向回登录页。

2. 认证服务重复配置冲突

AddDefaultIdentity已经自动注册了Identity的Cookie认证方案(IdentityConstants.ApplicationScheme),你额外添加的AddAuthentication(...).AddCookie(...)属于重复配置,会干扰Identity的默认认证流程,导致Cookie验证异常,引发重定向循环。

3. 路由规则导致的returnUrl跳转异常

你通过options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "")将空路径(~/)映射到登录页,而登录成功后默认的returnUrl是~/。此时路由系统会优先匹配Razor Pages的路由规则,再次跳转到登录页,而非预期的Home/Index。


分步解决方案

解决账号确认问题

  • 临时测试方案:关闭账号确认要求,修改AddDefaultIdentity的配置:
    builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = false)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    
  • 正式环境方案:确保用户账号已确认,可在注册逻辑中添加自动确认代码:
    // 注册时自动确认邮箱和账号
    var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
    var result = await _userManager.CreateAsync(user, Input.Password);
    if (result.Succeeded)
    {
        await _userManager.SetEmailConfirmedAsync(user, true);
        // 其他注册逻辑...
    }
    
    或手动在数据库中将AspNetUsers表对应账号的EmailConfirmed字段设为true。

移除重复的认证配置

删除Program.cs中这段冗余代码:

builder.Services.AddAuthentication(IdentityConstants.ApplicationScheme).AddCookie(options =>
{
    options.LoginPath = "/Identity/Account/Login";
});

修正登录后的跳转目标

修改Login.cshtml.cs中OnGetAsync和OnPostAsync方法的returnUrl默认值,明确指向Home/Index:

// OnGetAsync中
returnUrl ??= Url.Action("Index", "Home");

// OnPostAsync中
returnUrl ??= Url.Action("Index", "Home");

验证步骤

  1. 重启应用,使用已确认的账号(或关闭确认要求)登录。
  2. 检查登录成功后是否正确跳转到Home/Index页面。

内容的提问来源于stack exchange,提问作者Shaksham Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:00:52