diff --git a/MyWebsite/MyWebsite/Controllers/AdminController.cs b/MyWebsite/MyWebsite/Controllers/AdminController.cs index fee768c..472c73c 100644 --- a/MyWebsite/MyWebsite/Controllers/AdminController.cs +++ b/MyWebsite/MyWebsite/Controllers/AdminController.cs @@ -10,6 +10,7 @@ using MyWebsite.Models; using MyWebsite.Models.Databases; using MyWebsite.ViewModels; +#pragma warning disable CA1054 // Uri parameters should not be strings namespace MyWebsite.Controllers { [Authorize] @@ -22,15 +23,15 @@ namespace MyWebsite.Controllers [AllowAnonymous] [HttpGet] - public IActionResult Login() => - View(new CredentialViewModel(Database)); + public IActionResult Login(string ReturnUrl) => + View(new CredentialViewModel(Database, ReturnUrl)); [AllowAnonymous] [HttpPost] [ValidateAntiForgeryToken] public async Task Login(CredentialViewModel model) { - if (!ModelState.IsValid) + if (!ModelState.IsValid || model == null) { ModelState.AddModelError("Authorization error", "Invalid data"); return View(new CredentialViewModel(Database, model)); @@ -52,7 +53,7 @@ namespace MyWebsite.Controllers ClaimsIdentity id = new ClaimsIdentity(new Claim[] { claim }, "ApplicationCookie", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType); await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(id)).ConfigureAwait(false); - return RedirectToAction("Index", "Admin"); + return Redirect(model.ReturnUrl ?? "/Admin"); } public async Task Logout() diff --git a/MyWebsite/MyWebsite/ViewModels/CredentialViewModel.cs b/MyWebsite/MyWebsite/ViewModels/CredentialViewModel.cs index cc27a30..aa2e2c1 100644 --- a/MyWebsite/MyWebsite/ViewModels/CredentialViewModel.cs +++ b/MyWebsite/MyWebsite/ViewModels/CredentialViewModel.cs @@ -1,13 +1,19 @@ using MyWebsite.Models; using MyWebsite.Models.Databases; +#pragma warning disable CA1054 // Uri parameters should not be strings +#pragma warning disable CA1056 // Uri properties should not be strings namespace MyWebsite.ViewModels { public class CredentialViewModel : ViewModelBase { public CredentialModel Credential { get; set; } + public string ReturnUrl { get; set; } public CredentialViewModel(DatabaseContext context) : base(context) { } + public CredentialViewModel(DatabaseContext context, string returnUrl) : base(context) => + ReturnUrl = returnUrl; + public CredentialViewModel() : base(null) { } public CredentialViewModel(DatabaseContext context, CredentialViewModel model) : base(context) => Credential = model?.Credential; diff --git a/MyWebsite/MyWebsite/Views/Admin/Login.cshtml b/MyWebsite/MyWebsite/Views/Admin/Login.cshtml index 6510e9b..a95ec14 100644 --- a/MyWebsite/MyWebsite/Views/Admin/Login.cshtml +++ b/MyWebsite/MyWebsite/Views/Admin/Login.cshtml @@ -10,6 +10,7 @@
+
@@ -20,7 +21,8 @@
- + +