We are using Angular + AuthServer (OpenIddict) for authentication, but the client reported that it takes 3-5 seconds from opening the application to reaching the login page. Is this normal, or how can we speed up this process?
I originally wanted to extend my subscription for one year. The original price was discounted by 40%, but why is the Black Friday discount even smaller now?
I tried to resolve it through inheritance, but it caused another error.
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.JsTree;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton.ObjectMapping;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton.Themes.Lepton.Libraries.JsTree;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton.Toolbars;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars;
using Volo.Abp.AspNetCore.Mvc.UI.Theming;
using Volo.Abp.AutoMapper;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
namespace Mulan.One.Public.Web.Themes.Lepton;
public class MulanAbpAspNetCoreMvcUiLeptonThemeModule : AbpAspNetCoreMvcUiLeptonThemeModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpThemingOptions>(options =>
{
options.Themes.Add<LeptonTheme>();
if (options.DefaultThemeName == null)
{
options.DefaultThemeName = LeptonTheme.Name;
}
});
// 和 LeptonXTheme 重覆了,會造成 runtime 錯誤
// ArgumentException: An item with the same key has already been added. Key: 401
// Configure<AbpErrorPageOptions>(options =>
// {
// options.ErrorViewUrls.Add("401", "~/Views/Error/401.cshtml");
// options.ErrorViewUrls.Add("403", "~/Views/Error/403.cshtml");
// options.ErrorViewUrls.Add("404", "~/Views/Error/404.cshtml");
// options.ErrorViewUrls.Add("500", "~/Views/Error/500.cshtml");
// });
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<AbpAspNetCoreMvcUiLeptonThemeModule>();
});
Configure<AbpToolbarOptions>(options =>
{
options.Contributors.Add(new LeptonThemeMainTopToolbarContributor());
});
Configure<AbpBundlingOptions>(options =>
{
options
.StyleBundles
.Add(LeptonThemeBundles.Styles.Global, bundle =>
{
bundle
.AddBaseBundles(StandardBundles.Styles.Global)
.AddContributors(typeof(LeptonGlobalStyleContributor));
});
options
.ScriptBundles
.Add(LeptonThemeBundles.Scripts.Global, bundle =>
{
bundle
.AddBaseBundles(StandardBundles.Scripts.Global)
.AddContributors(typeof(LeptonGlobalScriptContributor));
});
});
Configure<AbpBundleContributorOptions>(options =>
{
options.Extensions<JsTreeStyleContributor>()
.Add<LeptonJsTreeStyleContributorExtension>();
});
context.Services.AddAutoMapperObjectMapper<AbpAspNetCoreMvcUiLeptonThemeModule>();
Configure<AbpAutoMapperOptions>(options =>
{
options.AddProfile<LeptonThemeAutoMapperProfile>(validate: true);
});
}
}
Are there any solutions to this problem?
internal class Program { private static async Task Main(string[] args) { using var app = await AbpApplicationFactory.CreateAsync<AbpEmailingModule>();
await app.InitializeAsync();
var settingProvider = app.ServiceProvider.GetRequiredService<ISettingProvider>();
var test = await settingProvider.GetOrNullAsync(EmailSettingNames.DefaultFromAddress);
}
}
Unhandled exception. Volo.Abp.AbpException: Undefined setting: Abp.Mailing.DefaultFromAddress at Volo.Abp.Settings.SettingDefinitionManager.GetAsync(String name) at Volo.Abp.Settings.SettingProvider.GetOrNullAsync(String name) at TwAbp.Emailing.Surenotify.ConsoleTest.Program.Main(String[] args) in /Users/rex/Documents/surenotify-emailing/TwAbp.Emailing.Surenotify/TwAbp.Emailing.Surenotify.ConsoleTest/Program.cs:line 19 at TwAbp.Emailing.Surenotify.ConsoleTest.Program.<Main>(String[] args)
Process finished with exit code 134.
I would like to ask, if I have implemented both MailKit and another similar email sending module, how can I allow tenants to choose one of them to send emails through configuration?
In this case, you would typically need to capture the user's domain dynamically at runtime and set the RootUrl accordingly. Depending on how your application is structured, you might consider using the Request object to determine the domain of the current request and configure the RootUrl based on that.
For example:
.Configure<PaymentWebOptions>(options =>
{
var currentDomain = HttpContext.Request.Host.Value; // Get the current domain dynamically
options.RootUrl = $"https://{currentDomain}";
options.CallbackUrl = $"https://{currentDomain}/Payment/Success";
options.GatewaySelectionCheckoutButtonStyle = configuration["Payment:GatewaySelectionCheckoutButtonStyle"];
});
This approach grabs the domain from the current HTTP request, allowing each user to have their own dynamically configured RootUrl.
Even though I've disabled 2FA at the host/tenant level, the option still shows up in the menu.
Related docs: ABP - Two-Factor Authentication (User Side) https://abp.io/docs/latest/modules/identity/two-factor-authentication#user-side
Can a multi-tenant Angular app support logging in to the same auth server from different domains, while preventing switching to other tenants? Below is my Angular dynamic-env.json configuration.
{ "production": true, "application": { "baseUrl": "https://{0}.koimpact.tw", "name": "Sroi" }, "oAuthConfig": { "issuer": "https://auth-imm.koimpact.tw/", "redirectUri": "https://{0}.koimpact.tw", "clientId": "Sroi_App", "responseType": "code", "scope": "offline_access Sroi", "requireHttps": true }, "apis": { "default": { "url": "https://api-imm.koimpact.tw", "rootNamespace": "Aws.Sroi" }, "AbpAccountPublic": { "url": "https://api-imm.koimpact.tw", "rootNamespace": "AbpAccountPublic" } } }
In case of a potential API key exposure, is it possible to reset the key? Also, what would be the impact on our live systems or those already deployed to client environments?