diff --git a/Oqtane.Client/Modules/Admin/Login/Index.razor b/Oqtane.Client/Modules/Admin/Login/Index.razor
index 476c93ef..73b22c94 100644
--- a/Oqtane.Client/Modules/Admin/Login/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Login/Index.razor
@@ -36,10 +36,13 @@
@@ -78,6 +81,7 @@
private string _passwordtype = "password";
private string _togglepassword = string.Empty;
private bool _remember = false;
+ private bool _alwaysremember = false;
private string _code = string.Empty;
private string _returnUrl = string.Empty;
@@ -151,6 +155,10 @@
AddModuleMessage(Localizer["ExternalLoginStatus." + PageState.QueryString["status"]], MessageType.Info);
}
}
+ if (PageState.Site.Settings.TryGetValue("LoginOptions:AlwaysRemember", out string alwaysRememberStr))
+ {
+ _alwaysremember = Convert.ToBoolean(alwaysRememberStr);
+ }
}
catch (Exception ex)
{
@@ -185,7 +193,14 @@
var user = new User { SiteId = PageState.Site.SiteId, Username = _username, Password = _password, LastIPAddress = SiteState.RemoteIPAddress};
if (!twofactor)
- {
+ {
+ bool alwaysRemember = false;
+ if (PageState.Site.Settings.TryGetValue("LoginOptions:AlwaysRemember", out string alwaysRememberStr))
+ {
+ alwaysRemember = Convert.ToBoolean(alwaysRememberStr);
+ }
+ bool remember = alwaysRemember || _remember;
+ _remember = remember;
user = await UserService.LoginUserAsync(user, hybrid, _remember);
}
else
diff --git a/Oqtane.Client/Modules/Admin/Users/Index.razor b/Oqtane.Client/Modules/Admin/Users/Index.razor
index c7968ee3..fe6b2320 100644
--- a/Oqtane.Client/Modules/Admin/Users/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Users/Index.razor
@@ -98,6 +98,21 @@ else
+
+
+
+
+
+
+
+
+
+
+
+
}
@if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
@@ -387,6 +402,8 @@ else
private string _allowsitelogin;
private string _twofactor;
private string _cookiename;
+ private string _cookieexpiration;
+ private string _alwaysremember;
private string _minimumlength;
private string _uniquecharacters;
@@ -446,6 +463,8 @@ else
{
_twofactor = SettingService.GetSetting(settings, "LoginOptions:TwoFactor", "false");
_cookiename = SettingService.GetSetting(settings, "LoginOptions:CookieName", ".AspNetCore.Identity.Application");
+ _cookieexpiration = SettingService.GetSetting(settings, "LoginOptions:CookieExpiration", "");
+ _alwaysremember = SettingService.GetSetting(settings, "LoginOptions:AlwaysRemember", "false");
_minimumlength = SettingService.GetSetting(settings, "IdentityOptions:Password:RequiredLength", "6");
_uniquecharacters = SettingService.GetSetting(settings, "IdentityOptions:Password:RequiredUniqueChars", "1");
@@ -537,6 +556,8 @@ else
{
settings = SettingService.SetSetting(settings, "LoginOptions:TwoFactor", _twofactor, false);
settings = SettingService.SetSetting(settings, "LoginOptions:CookieName", _cookiename, true);
+ settings = SettingService.SetSetting(settings, "LoginOptions:CookieExpiration", _cookieexpiration, true);
+ settings = SettingService.SetSetting(settings, "LoginOptions:AlwaysRemember", _alwaysremember, false);
settings = SettingService.SetSetting(settings, "IdentityOptions:Password:RequiredLength", _minimumlength, true);
settings = SettingService.SetSetting(settings, "IdentityOptions:Password:RequiredUniqueChars", _uniquecharacters, true);
diff --git a/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs b/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs
index a4b0ebaa..8ef2f7ad 100644
--- a/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs
+++ b/Oqtane.Server/Extensions/OqtaneSiteAuthenticationBuilderExtensions.cs
@@ -31,6 +31,12 @@ namespace Oqtane.Extensions
builder.AddSiteNamedOptions(Constants.AuthenticationScheme, (options, alias, sitesettings) =>
{
options.Cookie.Name = sitesettings.GetValue("LoginOptions:CookieName", ".AspNetCore.Identity.Application");
+ string cookieExpStr = sitesettings.GetValue("LoginOptions:CookieExpiration", "");
+ if (!string.IsNullOrEmpty(cookieExpStr) && TimeSpan.TryParse(cookieExpStr, out TimeSpan cookieExpTS))
+ {
+ options.Cookie.Expiration = cookieExpTS;
+ options.ExpireTimeSpan = cookieExpTS;
+ }
});
// site OpenId Connect options