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

Asp.net core 3.1强制密码修改中间件跳转后返回原路径问题求解

问题根源

你当前的中间件逻辑存在执行分支缺失:当已登录且需要修改密码的用户访问MustChangePassword/ResetPassword页面时,代码没有执行_next(context)将请求传递给后续管道(即Controller/Action处理逻辑),也没有正常终止请求,导致重定向到修改密码页后请求管道异常中断,触发自动回跳。同时现有逻辑未排除静态资源路径,会导致修改密码页的样式、脚本资源加载被拦截重定向。


修复步骤

1. 修正中间件InvokeAsync逻辑

调整分支判断规则,所有不需要重定向的场景统一将请求交给后续管道处理:

public async Task InvokeAsync(HttpContext context, UserManager<User> userManager)
{   
    var crtUser = await userManager.GetUserAsync(context.User);
    // 仅对已登录、且需要强制修改密码的用户做校验
    if (crtUser != null && crtUser.MustChangePassword == true) 
    {
        string requestURL = context.Request.Path.ToString().ToLower();
        // 排除修改密码相关路径+静态资源路径,避免页面样式、脚本加载失败
        if (!requestURL.Contains("mustchangepassword") 
            && !requestURL.Contains("resetpassword")
            && !requestURL.Contains("/lib/")
            && !requestURL.Contains("/css/")
            && !requestURL.Contains("/js/"))
        {
            var returnUrl = context.Request.Path.Value == "/" ? "" : "?returnUrl=" + HttpUtility.UrlEncode(context.Request.Path.Value);
            context.Response.Redirect("/Home/MustChangePassword"+returnUrl ,true);
            // 重定向后直接返回,不继续走后续管道
            return;
        }
    }
    // 所有不需要重定向的场景,统一交给后续管道处理
    await _next(context).ConfigureAwait(false);
}

2. 调整中间件注册顺序

必须将密码校验中间件放在身份认证中间件之后、端点路由中间件之前,确保能正常读取到已登录用户的信息:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 前置中间件:异常处理、静态资源、路由等
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();

    // 先执行身份认证,才能拿到context.User信息
    app.UseAuthentication();
    app.UseAuthorization();

    // 身份认证完成后再注册密码校验中间件
    app.UseMustChangePassword();

    // 最后注册端点路由
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

3. 补充密码提交逻辑校验

密码修改成功后,务必将数据库中对应用户的MustChangePassword标记设置为false,否则提交后仍会被重定向回修改密码页。


内容的提问来源于stack exchange,提问作者Daniel.C. A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:06:05