From e7749b9ccc9dba2483c01587d0ab6ae521970996 Mon Sep 17 00:00:00 2001 From: Jass Bagga Date: Thu, 14 Dec 2017 10:29:36 -0800 Subject: [PATCH] return ReturnUrl when ExternalLogin fails (#186) Addresses #97 --- .../Pages/Account/ExternalLogin.cshtml.cs | 8 +++++--- .../Areas/Identity/Controllers/AccountController.cs | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ExternalLogin.cshtml.cs b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ExternalLogin.cshtml.cs index c613b5f751..d96924a5e3 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ExternalLogin.cshtml.cs +++ b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ExternalLogin.cshtml.cs @@ -63,12 +63,13 @@ namespace Company.WebApplication1.Pages.Account if (remoteError != null) { ErrorMessage = $"Error from external provider: {remoteError}"; - return RedirectToPage("./Login"); + return RedirectToPage("./Login", new { ReturnUrl = returnUrl }); } var info = await _signInManager.GetExternalLoginInfoAsync(); if (info == null) { - return RedirectToPage("./Login"); + ErrorMessage = "Error loading external login information."; + return RedirectToPage("./Login", new { ReturnUrl = returnUrl }); } // Sign in the user with this external login provider if the user already has a login. @@ -104,7 +105,8 @@ namespace Company.WebApplication1.Pages.Account var info = await _signInManager.GetExternalLoginInfoAsync(); if (info == null) { - throw new ApplicationException("Error loading external login information during confirmation."); + ErrorMessage = "Error loading external login information during confirmation."; + return RedirectToPage("./Login", new { ReturnUrl = returnUrl }); } if (ModelState.IsValid) diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Areas/Identity/Controllers/AccountController.cs b/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Areas/Identity/Controllers/AccountController.cs index 1f912fffef..c8efda9a23 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Areas/Identity/Controllers/AccountController.cs +++ b/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Areas/Identity/Controllers/AccountController.cs @@ -273,12 +273,13 @@ namespace Company.WebApplication1.Identity.Controllers if (remoteError != null) { ErrorMessage = $"Error from external provider: {remoteError}"; - return RedirectToAction(nameof(Login)); + return RedirectToAction(nameof(Login), new { ReturnUrl = returnUrl }); } var info = await _signInManager.GetExternalLoginInfoAsync(); if (info == null) { - return RedirectToAction(nameof(Login)); + ErrorMessage = "Error loading external login information."; + return RedirectToAction(nameof(Login), new { ReturnUrl = returnUrl }); } // Sign in the user with this external login provider if the user already has a login. @@ -311,7 +312,8 @@ namespace Company.WebApplication1.Identity.Controllers var info = await _signInManager.GetExternalLoginInfoAsync(); if (info == null) { - throw new ApplicationException("Error loading external login information during confirmation."); + ErrorMessage = "Error loading external login information during confirmation."; + return RedirectToAction(nameof(Login), new { ReturnUrl = returnUrl }); } if (ModelState.IsValid)