diff --git a/src/blazor/admin/BootstrapAdmin.Web/Controllers/AccountController.cs b/src/blazor/admin/BootstrapAdmin.Web/Controllers/AccountController.cs
index 9b0dc5ba..c9a02678 100644
--- a/src/blazor/admin/BootstrapAdmin.Web/Controllers/AccountController.cs
+++ b/src/blazor/admin/BootstrapAdmin.Web/Controllers/AccountController.cs
@@ -30,7 +30,7 @@ namespace Bootstrap.Admin.Controllers
///
///
[HttpPost]
- public async Task Login(string userName, string password, [FromQuery] string? remember,
+ public async Task Login(string userName, string password, [FromQuery] string? remember, [FromQuery] string? returnUrl,
[FromServices] IUser userService,
[FromServices] IDict dictService,
[FromServices] ILogin loginService)
@@ -50,28 +50,28 @@ namespace Bootstrap.Admin.Controllers
}
await loginService.Log(userName, auth);
- return auth ? await SignInAsync(userName, persistent, period) : RedirectLogin();
+ return auth ? await SignInAsync(userName, persistent, period, returnUrl) : RedirectLogin(returnUrl);
}
- private async Task SignInAsync(string userName, bool persistent, int period = 0, string authenticationScheme = CookieAuthenticationDefaults.AuthenticationScheme)
+ private async Task SignInAsync(string userName, bool persistent, int period = 0, string? returnUrl = null, string authenticationScheme = CookieAuthenticationDefaults.AuthenticationScheme)
{
var identity = new ClaimsIdentity(authenticationScheme);
identity.AddClaim(new Claim(ClaimTypes.Name, userName));
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity), new AuthenticationProperties { ExpiresUtc = DateTimeOffset.Now.AddDays(period), IsPersistent = persistent });
- // redirect origin url
- var originUrl = Request.Query[CookieAuthenticationDefaults.ReturnUrlParameter].FirstOrDefault() ?? "/Home/Index";
- return Redirect(originUrl);
+ return Redirect(returnUrl ?? "/Home/Index");
}
- private IActionResult RedirectLogin()
+ private IActionResult RedirectLogin(string? returnUrl = null)
{
var query = Request.Query.Aggregate(new Dictionary(), (d, v) =>
{
d.Add(v.Key, v.Value.ToString());
return d;
});
- return Redirect(QueryHelpers.AddQueryString(Request.PathBase + CookieAuthenticationDefaults.LoginPath, query));
+ return returnUrl == null
+ ? Redirect(QueryHelpers.AddQueryString(Request.PathBase + CookieAuthenticationDefaults.LoginPath, query))
+ : Redirect(returnUrl);
}
#endregion
@@ -94,14 +94,9 @@ namespace Bootstrap.Admin.Controllers
///
/// 短信验证登陆方法
///
- ///
- ///
- ///
- ///
- /// Remember.
///
[HttpPost()]
- public async Task Mobile(string phone, string code, [FromQuery] string? remember,
+ public async Task Mobile(string phone, string code, [FromQuery] string? remember, [FromQuery] string? returnUrl,
[FromServices] ISMSProvider provider,
[FromServices] ILogin loginService,
[FromServices] IUser userService,
@@ -123,7 +118,7 @@ namespace Bootstrap.Admin.Controllers
{
userService.TryCreateUserByPhone(phone, code, context.AppId, provider.Options.Roles);
}
- return auth ? await SignInAsync(phone, persistent, period, MobileSchema) : RedirectLogin();
+ return auth ? await SignInAsync(phone, persistent, period, returnUrl, MobileSchema) : RedirectLogin(returnUrl);
}
#endregion
diff --git a/src/blazor/admin/BootstrapAdmin.Web/Pages/Account/Login.razor.cs b/src/blazor/admin/BootstrapAdmin.Web/Pages/Account/Login.razor.cs
index 6cd8f825..92d690a8 100644
--- a/src/blazor/admin/BootstrapAdmin.Web/Pages/Account/Login.razor.cs
+++ b/src/blazor/admin/BootstrapAdmin.Web/Pages/Account/Login.razor.cs
@@ -17,7 +17,11 @@ public partial class Login
private bool RememberPassword { get; set; }
- private string? PostUrl { get; set; } = "/Account/Login";
+ private string? PostUrl { get; set; }
+
+ [SupplyParameterFromQuery]
+ [Parameter]
+ public string? ReturnUrl { get; set; }
[Inject]
[NotNull]
@@ -31,18 +35,23 @@ public partial class Login
base.OnInitialized();
Title = DictsService.GetWebTitle();
+
+ PostUrl = QueryHelper.AddQueryString("/Account/Login", "ReturnUrl", ReturnUrl ?? "");
}
void OnClickSwitchButton()
{
var rem = RememberPassword ? "true" : "false";
- PostUrl = UseMobileLogin ? $"/Account/Mobile?remember={rem}" : $"/Account/Login?remember={rem}";
+ PostUrl = QueryHelper.AddQueryString(UseMobileLogin ? "/Account/Mobile" : "/Account/Login", new Dictionary()
+ {
+ [nameof(ReturnUrl)] = ReturnUrl,
+ ["remember"] = rem
+ });
}
Task OnRememberPassword(bool remember)
{
- var rem = remember ? "true" : "false";
- PostUrl = UseMobileLogin ? $"/Account/Mobile?remember={rem}" : $"/Account/Login?remember={rem}";
+ OnClickSwitchButton();
return Task.CompletedTask;
}
diff --git a/src/blazor/client/BootstrapClient.Shared/Shared/MainLayout.razor.cs b/src/blazor/client/BootstrapClient.Shared/Shared/MainLayout.razor.cs
index 148577d1..7c4a4cdd 100644
--- a/src/blazor/client/BootstrapClient.Shared/Shared/MainLayout.razor.cs
+++ b/src/blazor/client/BootstrapClient.Shared/Shared/MainLayout.razor.cs
@@ -73,6 +73,10 @@ namespace BootstrapClient.Web.Shared.Shared
[NotNull]
private IOptions? AuthorizationOption { get; set; }
+ [Inject]
+ [NotNull]
+ private NavigationManager? NavigationManager { get; set; }
+
///
/// OnInitialized 方法
///
@@ -95,6 +99,6 @@ namespace BootstrapClient.Web.Shared.Shared
private Task OnAuthorizing(string url) => SecurityService.AuhorizingNavigation(UserName, url);
- private string GetAuthorUrl() => $"{AuthorizationOption.Value.AuthHost}/Account/Login";
+ private string GetAuthorUrl() => $"{AuthorizationOption.Value.AuthHost}/Account/Login?ReturnUrl={NavigationManager.Uri}";
}
}