【问题标题】:Blazor redirect back to local url from external urlBlazor 从外部 url 重定向回本地 url
【发布时间】:2020-09-14 08:43:03
【问题描述】:

我有一个 Blazor 应用程序,用户应该在外部登录页面(Intranet 内)上登录,登录后我想重定向回应用程序主页(仪表板)。 所以我想要的基本上是用户打开应用程序并单击登录按钮,然后应用程序路由到外部登录页面,用户输入他的用户名和密码,用户登录后,我的应用程序的仪表板(主页)被加载并显示。

所以我有一个登录按钮,当用户单击它时,他将被路由到“login.razor”。 在“login.razor”我有以下代码:

@page "/login"
@inject NavigationManager NavManager

@code {
    protected override async Task OnInitializedAsync()
    {
        string homeUrl = "/";

        //First attempt:
        // This doesn't work
        //NavManager.NavigateTo($"http://external.login.page?redirectUrl={homeUrl}", forceLoad: true);

        // Second attempt: (doesn't work either)
        // Navigate to external login
        NavManager.NavigateTo($"http://external.login.page", forceLoad: true);

        // Navigate to Home of blazor app (this is suppose to be executed after the user has submitted the above login form)
        NavManager.NavigateTo($"{homeUrl}", forceLoad: true);
    }
}

第一次尝试失败,因为服务器响应是错误的。 第二次尝试不起作用,因为在登录页面加载后应用程序几乎立即路由到“主页”。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 您的外部登录概念不正确,当您导航到外部登录时,外部登录应该将用户返回到您的 blazor 站点。您不必在外部登录后立即调用homeUrl,它永远不会那样工作,因此您会立即看到homeUrl,用户进入登录页面。
  • 在外部登录后,服务器自动重定向到自己的家……但我不想显示它的家。登录不返回用户。登录后我可以手动获取用户信息。我想要的只是让用户在外部登录表单上输入登录信息。之后我会从服务器手动获取用户数据。根据这个响应,我可以确定它是什么用户以及登录是否成功。唯一的问题是登录重定向到服务器主页,而不是我的 blazor 页面主页。

标签: c# asp.net blazor


【解决方案1】:

我明白你的意思,它类似于 Azure Active Directory 或使用任何外部提供商登录,基本上重定向过程到仪表板或您想要的页面应该发生在登录页面级别而不是来自您的应用程序,我的意思是登录其他应用程序中的页面应接收名为例如 redirect_uri 的参数,因此代码将如下所示

// Navigate to external login
NavManager.NavigateTo($"http://external.login.page?redirect_url={home_uri}", forceLoad: true);

在登录应用程序级别,如果登录尝试顺利,则获取该参数的值并将用户重定向到它。

【讨论】:

  • 我也是这么想的,但是我得到了 405 错误。
  • 405?当您收到此错误时,您会解释云吗?提交登录表单时?​​span>
  • 是的,当我提交登录表单时。
  • 所以在这种情况下,这可能是因为动词,请确保指定操作类型,例如使用 [HttpPost] 装饰登录操作
  • 我想在哪里装饰它?你能编辑你上面的例子,让我知道你的意思吗?
猜你喜欢
  • 2022-07-24
  • 2019-10-23
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
  • 2012-01-10
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多