#c# #asp.net #blazor
#c# #asp.net #blazor
Вопрос:
У меня есть приложение Blazor, в котором пользователь должен выполнить вход на внешней странице входа (в интрасети), и после входа в систему я хочу перенаправить обратно на главную страницу приложений (панель мониторинга). Итак, что я хочу, в основном, пользователь открывает приложение и нажимает кнопку входа в систему, затем приложение переходит на внешнюю страницу входа, пользователь вводит свое имя пользователя и пароль, после того, как пользователь вошел в систему, панель мониторинга (главная) из моего приложения загружается и отображается.
Итак, у меня есть кнопка входа, и когда пользователь нажимает на нее, он будет перенаправлен на «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);
}
}
Первая попытка не работает, поскольку ответ сервера является ошибкой.
Вторая попытка не работает, поскольку приложение почти мгновенно перенаправляется на «home» после загрузки страницы входа в систему.
У кого-нибудь есть идея, как это решить?
Комментарии:
1. Ваша концепция внешнего входа в систему неверна, когда вы переходите к внешнему входу, внешний вход должен возвращать пользователя на ваш сайт blazor. Вам не нужно вызывать
homeUrl
сразу после внешнего входа в систему, это никогда не сработает таким образом, поэтому вы видите, чтоhomeUrl
пользователь сразу переходит на страницу входа.2. После внешнего входа сервер автоматически перенаправляет на свой собственный домашний адрес… но я не хочу отображать его home. Логин не возвращает пользователя. После входа в систему я могу получить userinfo вручную. Все, что я хочу, это просто позволить пользователю ввести регистрационную информацию во внешней форме входа. После этого я бы извлек данные пользователя вручную с сервера. Основываясь на этом ответе, я могу определить, что это за пользователь и был ли вход в систему успешным. Единственная проблема заключается в том, что логин перенаправляется на домашний сервер, а не на домашнюю страницу моей страницы blazor.
3. Получили ли вы ответ на этот вопрос через два года? для меня это работает только в первый раз, и я думаю, что это проблема с кэшированием
Ответ №1:
Я понимаю вашу точку зрения, это что-то вроде Azure Active Directory или входа в систему с любым внешним провайдером, в основном процесс перенаправления на панель мониторинга или нужную вам страницу должен происходить на уровне страницы входа не из вашего приложения, я имею в виду, что страница входа в другое приложение должна получать параметр, вызываемый, например, redirect_uri, поэтому код будет выглядеть следующим образом
// Navigate to external login
NavManager.NavigateTo($"http://external.login.page?redirect_url={home_uri}", forceLoad: true);
И на уровне приложения для входа в систему, если попытка входа в систему проходит успешно, тогда получите значение этого параметра и перенаправьте пользователя на него.
Комментарии:
1. Я тоже так думал, но я получаю ошибку 405.
2. 405? Облако, вы объясняете, когда получаете эту ошибку? При отправке формы входа?
3. Да, когда я отправляю форму входа.
4. Итак, в этом случае это может быть из-за глагола, обязательно укажите тип действия, например, украсить действие входа с помощью [HttpPost]
5. Где я должен его украсить? Не могли бы вы отредактировать свой пример выше, чтобы я понял, что вы имеете в виду?