this is possible if only you can send us the module. but in this way, everybody can install it.
you can add an property to User entity "PasswordSetDate". then override Login method to redirect the user to password change page. this sounds like a good feature for the new versions. Enforcing user change password after some time.
authorize attribute is extended from Microsoft authorize. and it's policy based authorizations. you can create custom policies for your requirement https://docs.microsoft.com/en-us/aspnet/core/security/authorizationpolicies?view=aspnetcore-5.0
maybe you can use https://docs.abp.io/en/abp/latest/Background-Jobs to process the message in the consumer method, then it'll be async
maybe the response was not succesful, can you check the log
we are also checking
ok. so there might be a problem. created a issue. you can track this https://github.com/abpframework/abp/issues/9082
closing the issue since the main defect has been resolved. you can create a new ticket for your new questiion. thank you
reopen if it doesn't work for you in the following version.
I checked the log file. The main exception is The timeout period elapsed prior to completion of the operation or the server is not responding for SQL command.
This sounds like ABP cannot reach or find the connection string of the specified tenant. So the problem is at the DB.
From v4.3.X the connection strings are stored in SaasTenantConnectionStrings table.
So I guess your application doesn't find the connection string for the new tenant and throws server not responding error.
Add a connection string like this to your SaasTenantConnectionStrings table. And let's see if it works.
Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Microsoft.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
---> System.ComponentModel.Win32Exception (258): Dépassement du délai d’attente.
at Microsoft.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__169_0(Task`1 result)
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location ---
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable`1.AsyncEnumerator.InitializeReaderAsync(DbContext _, Boolean result, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func`4 operation, Func`4 verifySucceeded, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable`1.AsyncEnumerator.MoveNextAsync()
at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleOrDefaultAsync[TSource](IAsyncEnumerable`1 asyncEnumerable, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleOrDefaultAsync[TSource](IAsyncEnumerable`1 asyncEnumerable, CancellationToken cancellationToken)
at Volo.Abp.Domain.Repositories.EntityFrameworkCore.EfCoreRepository`3.FindAsync(TKey id, Boolean includeDetails, CancellationToken cancellationToken)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at Volo.Saas.Tenants.TenantStore.GetCacheItemAsync(Nullable`1 id, String name)
at Volo.Saas.Tenants.TenantStore.FindAsync(Guid id)
at Jureez.Data.JureezTenantDatabaseMigrationHandler.MigrateAndSeedForTenantAsync(Guid tenantId, String adminEmail, String adminPassword) in C:\Personnel\Developpement\Jureez\aspnet-core\src\Jureez.Domain\Data\JureezTenantDatabaseMigrationHandler.cs:line 92
ClientConnectionId:c87fd6c1-c77d-4052-9967-8c65aeb3214d