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

服务端Blazor应用登录后如何重定向回用户登录前访问的页面

Blazor Server端登录后重定向回原页面的实现方案

核心实现逻辑

整个流程分为3个核心步骤:

  • 触发登录跳转时,将当前页面的完整URI编码后作为returnUrl查询参数传递给登录页
  • 登录页接收并暂存returnUrl参数
  • 登录验证通过后,校验returnUrl为站内合法地址后执行重定向,非法则回退到首页

详细实现代码

1. 登录跳转逻辑(放置登录按钮的组件)

注入NavigationManager获取当前页面地址,跳转登录时携带参数:

@inject NavigationManager NavMgr

<!-- 登录按钮 -->
<button @onclick="GoToLogin">登录</button>

@code {
    private void GoToLogin()
    {
        // 对当前地址做编码处理,避免特殊字符导致参数异常
        var encodedReturnUrl = Uri.EscapeDataString(NavMgr.Uri);
        NavMgr.NavigateTo($"/Account/Login?returnUrl={encodedReturnUrl}");
    }
}

2. 登录页参数接收与重定向逻辑

用[SupplyParameterFromQuery]接收查询参数,登录成功后先校验地址合法性再跳转:

@page "/Account/Login"
@inject NavigationManager NavMgr
@inject SignInManager<IdentityUser> SignInManager

<!-- 省略登录表单UI代码 -->

@code {
    // 接收查询参数中的returnUrl
    [SupplyParameterFromQuery(Name = "returnUrl")]
    public string? ReturnUrl { get; set; }

    // 登录表单提交后的处理方法
    private async Task HandleLoginSubmit(LoginInputModel Input)
    {
        // 省略账号密码校验、登录逻辑代码
        var signInResult = await SignInManager.PasswordSignInAsync(
            Input.UserName, 
            Input.Password, 
            Input.RememberMe, 
            lockoutOnFailure: false
        );

        if (signInResult.Succeeded)
        {
            // *必须对returnUrl做合法性校验,禁止直接跳转外部地址,避免开放重定向安全漏洞*
            if (!string.IsNullOrEmpty(ReturnUrl) && NavMgr.IsBaseUri(ReturnUrl))
            {
                // forceLoad设为true可强制刷新页面,确保新的认证Cookie生效
                NavMgr.NavigateTo(ReturnUrl, forceLoad: true);
            }
            else
            {
                // 地址不合法时默认跳转到首页
                NavMgr.NavigateTo("/", forceLoad: true);
            }
        }
    }
}

额外适配场景

如果是[Authorize]属性触发的自动重定向到登录页,ASP.NET Core Identity默认已经自动携带当前请求地址作为returnUrl参数,不需要额外修改跳转逻辑,只需保证登录页的重定向逻辑按上述实现即可。

内容的提问来源于stack exchange,提问作者Jonathan Allen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:48:02