Обработка на стороне сервера после обратного вызова с внешнего входа - PullRequest
0 голосов
/ 10 марта 2020

В моем проекте включена сторонняя регистрация, использующая ASP. Net Идентификация. После первоначального почтового запроса я перенаправляю через сторонний логин и возвращаюсь к OnGetCallbackAsyn c. Однако я хочу создать учетную запись с помощью usermanager и перенаправить на какую-то другую страницу.

public IActionResult OnPost ( string provider, string returnUrl = null )
{
    // Request a redirect to the external login provider.
    var redirectUrl = Url.Page( "./ExternalLogin", pageHandler: "Callback", values: new { returnUrl } );
    var properties = _signInManager.ConfigureExternalAuthenticationProperties( provider, redirectUrl );
    return new ChallengeResult( provider, properties );
}

public IActionResult OnGetAsync ()
{
    return RedirectToPage( "./Login" );
}

public async Task<IActionResult> OnGetCallbackAsync ( string returnUrl = null, string remoteError = null )
{
    ...
   return Page()
}

public async Task<IActionResult> OnPostConfirmationAsync ( string returnUrl = null )
{
   ... //create accounts etc.
   return LocalRedirect( returnUrl );
}

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

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

Должен ли я беспокоиться о том, чтобы сохранить этот запрос идемпотентным? Если да, то как мне go сообщить о том, что мне нужно выполнить этот пост-запрос или выполнить обработку на стороне сервера?

1 Ответ

0 голосов
/ 11 марта 2020

Если вам нужно автоматически перенаправить, вы можете просто позвонить OnPostConfirmationAsyn c из OnGetCallbackAsyn c. как то так

public IActionResult OnPost ( string provider, string returnUrl = null )
{
    // Request a redirect to the external login provider.
    var redirectUrl = Url.Page( "./ExternalLogin", pageHandler: "Callback", values: new { returnUrl } );
    var properties = _signInManager.ConfigureExternalAuthenticationProperties( provider, redirectUrl );
    return new ChallengeResult( provider, properties );
}

public IActionResult OnGetAsync ()
{
    return RedirectToPage( "./Login" );
}

public async Task<IActionResult> OnGetCallbackAsync ( string returnUrl = null, string remoteError = null )
{
    ...
   return await OnPostConfirmationAsync(returnUrl);
}

public async Task<IActionResult> OnPostConfirmationAsync ( string returnUrl = null )
{
   ... //create accounts etc.
   return LocalRedirect( returnUrl );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...