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 @@
+ @if (!_alwaysremember) + {
+ }
@@ -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