URL перенаправления при входе в систему через панель навигации - PullRequest
0 голосов
/ 07 апреля 2020

Я строю бритвенные страницы ASP. Net Веб-сайт Core 3.1, и есть некоторые страницы, на которых есть контент, видимый без аутентификации, и когда пользователь проходит аутентификацию, он показывает дополнительную информацию.

Когда пользователь посещает страницу, требующую полной авторизации, он сразу же переносит их на страницу входа в AzureAD, регистрирует их, а затем перенаправляет на страницу, на которой они только что были.

Когда вход в систему ссылка нажимается на заголовок на странице, где требуется авторизация для просмотра дополнительных сведений, она перенаправляет их на страницу входа в AzureAD, регистрирует их, затем перенаправляет на страницу индекса . Мне бы хотелось, чтобы эта ссылка имела такое же поведение и перенаправляла их на страницу, на которой они только что были.

_LoginPartial.cs html

@if (User.Identity.IsAuthenticated)
{
<ul class="nav navbar-nav ml-auto">
    <li class="navbar-text nav-item">Hello @User.FindFirst(System.Security.Claims.ClaimTypes.GivenName).Value!</li>
    <li class="nav-item"><a class="nav-link" asp-area="AzureAD" asp-controller="Account" asp-action="SignOut">Sign out</a></li>
</ul>
}
else
{
    <ul class="nav navbar-nav ml-auto">
        <li class="nav-item"><a class="nav-link" asp-area="AzureAD" asp-controller="Account" asp-action="SignIn" >Sign in</a></li>
    </ul>
}

Пример

Если пользователь получает ссылку, например, через QR-код, он не будет автоматически входить в систему. Когда они нажимают на ссылку входа, он перенаправляет пользователя на страницу индекса. Затем пользователю необходимо go вернуться в приложение с QR-кодом и либо повторно отсканировать код, либо щелкнуть ссылку, чтобы вернуться на ту же страницу.

РЕШЕНИЕ

Спасибо Nan Yu за решение ниже. Я изменил его, чтобы принять строку запроса.

_LoginPartial.cs html

 <ul class="nav navbar-nav ml-auto">
        <li class="nav-item">
            <a class="nav-link" asp-area="" asp-route-path="@Context.Request.Path" asp-route-query="@Context.Request.QueryString" asp-page="/Account" asp-page-handler="SignIn">Sign in</a>
        </li>
    </ul>

Account.cs html

  public IActionResult OnGetSignIn(string path, string query)
        {

            var redirectUrl = Url.Content("~/");

            if(Url.IsLocalUrl(path+query))
                return Challenge(
                    new AuthenticationProperties { RedirectUri = path + query },
                    AzureADDefaults.AuthenticationScheme);
            return Redirect("~/");


        }

1 Ответ

2 голосов
/ 07 апреля 2020

Вы можете настроить логику c для достижения этого в приложении на странице Razor:

  1. Добавить страницу бритвы учетной записи в папке Pages и добавить метод для сортировки вызова аутентификации с текущей путь к странице:

    public IActionResult OnGetSignIn(string path)
    {
    
        var redirectUrl = Url.Content("~/");
        return Challenge(
            new AuthenticationProperties { RedirectUri = path },
            AzureADDefaults.AuthenticationScheme);
    }
    

В _LoginPartial измените маршрут и задайте путь следующим образом:

    <li class="nav-item">
        <a class="nav-link text-dark"  asp-area="" asp-route-path="@Context.Request.Path" asp-page="/Account" asp-page-handler="SignIn" >Sign in</a>
    </li>

После аутентификации пользователя он будет перенаправлен на RedirectUri Config в свойствах аутентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...