Skip to content

Commit b801693

Browse files
authored
Fixing that a captcha is required on external login and registration - hotfix (Lombiq Technologies: GOV-44) (#17489)
1 parent 710940a commit b801693

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

src/OrchardCore.Modules/OrchardCore.ReCaptcha/Users/Handlers/LoginFormEventEventHandler.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using Microsoft.AspNetCore.Identity;
12
using OrchardCore.ReCaptcha.Services;
23
using OrchardCore.Users;
34
using OrchardCore.Users.Events;
@@ -7,10 +8,12 @@ namespace OrchardCore.ReCaptcha.Users.Handlers;
78
public class LoginFormEventEventHandler : ILoginFormEvent
89
{
910
private readonly ReCaptchaService _reCaptchaService;
11+
private readonly SignInManager<IUser> _signInManager;
1012

11-
public LoginFormEventEventHandler(ReCaptchaService reCaptchaService)
13+
public LoginFormEventEventHandler(ReCaptchaService reCaptchaService, SignInManager<IUser> signInManager)
1214
{
1315
_reCaptchaService = reCaptchaService;
16+
_signInManager = signInManager;
1417
}
1518

1619
public Task IsLockedOutAsync(IUser user)
@@ -23,14 +26,16 @@ public Task LoggedInAsync(IUser user)
2326
return Task.CompletedTask;
2427
}
2528

26-
public Task LoggingInAsync(string userName, Action<string, string> reportError)
29+
public async Task LoggingInAsync(string userName, Action<string, string> reportError)
2730
{
28-
if (_reCaptchaService.IsThisARobot())
31+
// When logging in via an external provider, authentication security is already handled by the provider.
32+
// Therefore, using a CAPTCHA is unnecessary and impractical, as users wouldn't be able to complete it anyway.
33+
if (!_reCaptchaService.IsThisARobot() || await _signInManager.GetExternalLoginInfoAsync() != null)
2934
{
30-
return _reCaptchaService.ValidateCaptchaAsync(reportError);
35+
return;
3136
}
3237

33-
return Task.CompletedTask;
38+
await _reCaptchaService.ValidateCaptchaAsync(reportError);
3439
}
3540

3641
public Task LoggingInFailedAsync(string userName)
Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using Microsoft.AspNetCore.Identity;
12
using OrchardCore.ReCaptcha.Services;
23
using OrchardCore.Users;
34
using OrchardCore.Users.Events;
@@ -7,19 +8,28 @@ namespace OrchardCore.ReCaptcha.Users.Handlers;
78
public class RegistrationFormEventHandler : IRegistrationFormEvents
89
{
910
private readonly ReCaptchaService _reCaptchaService;
11+
private readonly SignInManager<IUser> _signInManager;
1012

11-
public RegistrationFormEventHandler(ReCaptchaService recaptchaService)
13+
public RegistrationFormEventHandler(ReCaptchaService reCaptchaService, SignInManager<IUser> signInManager)
1214
{
13-
_reCaptchaService = recaptchaService;
15+
_reCaptchaService = reCaptchaService;
16+
_signInManager = signInManager;
1417
}
1518

1619
public Task RegisteredAsync(IUser user)
1720
{
1821
return Task.CompletedTask;
1922
}
2023

21-
public Task RegistrationValidationAsync(Action<string, string> reportError)
24+
public async Task RegistrationValidationAsync(Action<string, string> reportError)
2225
{
23-
return _reCaptchaService.ValidateCaptchaAsync(reportError);
26+
// When logging in via an external provider, authentication security is already handled by the provider.
27+
// Therefore, using a CAPTCHA is unnecessary and impractical, as users wouldn't be able to complete it anyway.
28+
if (await _signInManager.GetExternalLoginInfoAsync() != null)
29+
{
30+
return;
31+
}
32+
33+
await _reCaptchaService.ValidateCaptchaAsync(reportError);
2434
}
2535
}

0 commit comments

Comments
 (0)