The email should be unique among all tenants. Selecting a tenant is not a good choice.
-- how to update so that the email will be unique?
I know, but we can't do that, the link will be just: abp.io/account/login
what's VerifyBaseUrl? I am using v3 and do we need to set up the Site key and Site secret for each tenant? it's working in production, but it doesn't work in my local
no, only registration has the the tenant info:
Registration: Always start with a link that contains tenant info. For example, send the user a link with the tenant embedded.
the login page doesn't have the tenant info:
Login: Iterate through all tenants to check whether the email exists in any tenant. If a matching username/email + password combination is found in a tenant, log the user in.
For privacy protection of tenants, we cannot display the tenant list on the login and registration pages. A possible solution:
Registration: Always start with a link that contains tenant info. For example, send the user a link with the tenant embedded.
Login: Iterate through all tenants to check whether the email exists in any tenant. If a matching username/email + password combination is found in a tenant, log the user in.
If the same credentials are valid in multiple tenants, prompt the user to choose which tenant to log into.
any implementation suggestions?
ok, but AbpReCaptchaOptions could not be found
Works correctly in production server, but in local development environment, siteverify always returns a low score, causing validation to fail with error message: ** Verification failed, score below threshold**
I have added localhost in the domain list on the google reCAPTCHA key page
I have a hangfilre job: public class HourlyBackgroundWorker : HangfireBackgroundWorkerBase { private readonly ILogger<HourlyBackgroundWorker> _logger; private readonly IUserFileFeedbackService _userFileFeedbackService; private readonly IDataConnectionUserAnswerService _dataConnectionUserAnswerService; private readonly IDataConnectionUserAnswerRepository _dataConnectionUserAnswerRepository; private readonly IFeedbackFilesUpdaterService _feedbackFilesUpdaterService;
public HourlyBackgroundWorker(ILogger<HourlyBackgroundWorker> logger,
IUserFileFeedbackService userFileFeedbackService,
IDataConnectionUserAnswerService dataConnectionUserAnswerService,
IDataConnectionUserAnswerRepository dataConnectionUserAnswerRepository,
IFeedbackFilesUpdaterService feedbackFilesUpdaterService)
{
RecurringJobId = nameof(HourlyBackgroundWorker);
CronExpression = Cron.Hourly();
_logger = logger;
_userFileFeedbackService = userFileFeedbackService;
_dataConnectionUserAnswerService = dataConnectionUserAnswerService;
_dataConnectionUserAnswerRepository = dataConnectionUserAnswerRepository;
_feedbackFilesUpdaterService = feedbackFilesUpdaterService;
}
public override async Task DoWorkAsync(CancellationToken cancellationToken = default)
{
using var uow = LazyServiceProvider.LazyGetRequiredService<IUnitOfWorkManager>().Begin();
_logger.LogInformation("Hangfire:HourlyBackgroundWorker::UpdateFeedbacks");
await _feedbackFilesUpdaterService.UpdateAllFeedbacksAsync();
}
Is Hangfire multi-tenant aware by default? does this hourly job runs for each tenant? i.e. runs once per tenant?
I ended up creating my own distributed lock using redis, and it worked
sorry, had to create 3 posts, it was too long, so if you checked the screenshot, the types are correct. but still not working,