I mean can I reproduce the problem in a new template project or only your project?
How can I reproduce it?
hi
Steps to reproduce the issue?
Will there be an error in a new database?
hi
Please try to add new migrations
dotnet ef migrations add ABP_7_1
hi
You can use this sample to test your email sender.
https://github.com/abpframework/abp-samples/tree/master/EmailSendDemo
hi
Please share some information so that we can understand your situation correctly. Thanks
hi
Authentication.razor.cs
using Microsoft.AspNetCore.Components;
using Volo.Abp.AspNetCore.Components.WebAssembly;
using Volo.Abp.DependencyInjection;
namespace MyCompanyName.MyProjectName.Blazor.Pages;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXTheme.Pages.Authentication))]
public partial class Authentication
{
public readonly NavigationManager NavigationManager;
public Authentication(
WebAssemblyCachedApplicationConfigurationClient webAssemblyCachedApplicationConfigurationClient,
NavigationManager navigationManager)
: base(webAssemblyCachedApplicationConfigurationClient)
{
NavigationManager = navigationManager;
}
}
Authentication.razor
@inherits Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXTheme.Pages.Authentication
<Card>
<CardBody>
<RemoteAuthenticatorView Action="@Action">
<LoggingIn>
<LoadingIndicator/>
</LoggingIn>
<CompletingLoggingIn>
<LoadingIndicator/>
</CompletingLoggingIn>
<LogOut>
<LoadingIndicator/>
</LogOut>
<CompletingLogOut>
<LoadingIndicator/>
</CompletingLogOut>
<LogOutSucceeded>
@{
NavigationManager.NavigateTo("/authentication/login");
}
</LogOutSucceeded>
</RemoteAuthenticatorView>
</CardBody>
</Card>
Good news.
Your AuthServer project
PreConfigure<OpenIddictServerBuilder>(builder =>
{
builder.RemoveEventHandler(OpenIddictServerHandlers.Session.ValidateAuthorizedParty.Descriptor);
builder.AddEventHandler(AbpValidateAuthorizedParty.Descriptor);
}
using Microsoft.Extensions.Options;
using OpenIddict.Abstractions;
using OpenIddict.Server;
using Volo.Abp;
using Volo.Abp.OpenIddict.WildcardDomains;
using Volo.Abp.Text.Formatting;
namespace OpenIddict.Demo.Server;
public class AbpValidateAuthorizedParty : IOpenIddictServerHandler<OpenIddictServerEvents.ValidateLogoutRequestContext>
{
public static OpenIddictServerHandlerDescriptor Descriptor { get; }
= OpenIddictServerHandlerDescriptor.CreateBuilder<OpenIddictServerEvents.ValidateLogoutRequestContext>()
.UseScopedHandler<AbpValidateAuthorizedParty>()
.SetOrder(OpenIddictServerHandlers.Session.ValidateToken.Descriptor.Order + 1_000)
.SetType(OpenIddictServerHandlerType.BuiltIn)
.Build();
protected AbpOpenIddictWildcardDomainOptions WildcardDomainOptions { get; }
protected IOpenIddictApplicationManager ApplicationManager { get; }
public AbpValidateAuthorizedParty(IOptions<AbpOpenIddictWildcardDomainOptions> wildcardDomainOptions,IOpenIddictApplicationManager applicationManager)
{
WildcardDomainOptions = wildcardDomainOptions.Value;
ApplicationManager = applicationManager;
}
public async ValueTask HandleAsync(OpenIddictServerEvents.ValidateLogoutRequestContext context)
{
Check.NotNull(context, nameof(context));
Check.NotNull(context.IdentityTokenHintPrincipal, nameof(context.IdentityTokenHintPrincipal));
if (await CheckWildcardDomainAsync(context.PostLogoutRedirectUri))
{
return;
}
await new OpenIddictServerHandlers.Session.ValidateAuthorizedParty(ApplicationManager).HandleAsync(context);
}
protected virtual Task<bool> CheckWildcardDomainAsync(string url)
{
foreach (var domainFormat in WildcardDomainOptions.WildcardDomainsFormat)
{
var extractResult = FormattedStringValueExtracter.Extract(url, domainFormat, ignoreCase: true);
if (extractResult.IsMatch)
{
return Task.FromResult(true);
}
}
foreach (var domainFormat in WildcardDomainOptions.WildcardDomainsFormat)
{
if (domainFormat.Replace("{0}.", "").Equals(url, StringComparison.OrdinalIgnoreCase))
{
return Task.FromResult(true);
}
}
return Task.FromResult(false);
}
}