. NET Обработчик страницы входа в систему Core Identity OnGetAyn c () - PullRequest
1 голос
/ 15 марта 2020

Я работаю над проектом. NET Core 3.1, используя Identity. На странице Login.cs.html обработчик страницы OnGetAsync() выглядит следующим образом:

public async Task OnGetAsync(string returnUrl = null)
{
    if (!string.IsNullOrEmpty(ErrorMessage))
    {
        ModelState.AddModelError(string.Empty, ErrorMessage);
    }

    returnUrl = returnUrl ?? Url.Content("~/");

    // Clear the existing external cookie to ensure a clean login process
    await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);

    ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync())
        .ToList();

    ReturnUrl = returnUrl;
}

Я немного запутался по поводу строки кода returnUrl = returnUrl ?? Url.Content("~/"); и почему она написана таким образом. Почему проверяется, если returnUrl равно null, не всегда ли оно будет null? Почему бы не удалить string returnUrl = null в качестве параметра метода и назначить ReturnUrl = Url.Content("~/");? Я что-то здесь упускаю?

1 Ответ

3 голосов
/ 15 марта 2020

Параметр returnUrl был настроен для использования необязательного аргумента :

Если для этого параметра не передан аргумент, используется значение по умолчанию.

При настройке по умолчанию для Identity значение для returnUrl берется из строки запроса URL-адреса запроса. Например, следующий URL-адрес предоставляет значение для аргумента returnUrl:

/Identity/Account/Login?returnUrl=/Some/Protected/Route

В этом случае returnUrl будет , а не будет null. Однако рассмотрим следующий URL:

/Identity/Account/Login

В этом случае returnUrl будет null. После завершения процесса входа в систему нет URL-адреса для перенаправления, поэтому в строке, которую вы вызвали, будет установлено значение Url.Content("~/"). Это просто означает, что он в конечном итоге перенаправит пользователя на root веб-приложения, которым обычно является домашняя страница.

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