Я строю бритвенные страницы 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("~/");
}