Quantcast
Channel: Active questions tagged blazor - Stack Overflow
Viewing all articles
Browse latest Browse all 4839

Google ReCaptcha V3 only works on one page of Blazor App

$
0
0

I'm always getting Success: False on my Json response when using Google ReCaptcha v3 on a second page of my blazor app. Do I need 2 seperate sets of keys or something? I tried using different action names, doesn't work, tried using different instances of my GoogleCAPTCHAv3Service and that didn't work either. Here's the code:

Start.razor

protected override async Task OnAfterRenderAsync(bool firstRender){    if (UserSession.xxxx != Guid.Empty)        DatabaseErrorClear();    if (firstRender)    {        CurrentModel = await StartService.GetStart(UserSession.xxx);        if (AppSettings.Google.Captcha.AlwaysOn == true && AppSettings.Google.Captcha.Toggle == true)        {            CurrentModel.requireCaptcha = true;        }        if (CurrentModel.requireCaptcha)        {            token = await JSRuntime.InvokeAsync<string>("runCaptcha", AppSettings.Google.Captcha.SiteKey, "start");            await JSRuntime.InvokeVoidAsync("console.log", token);        }        if (CurrentModel.xxxxxx == null || CurrentModel.xxxxx?.xxxxx == null)            {            LoadError = "Error loading xxxxx. Please try again later.";            DisableSubmit(false);        }        ModelLoaded = true;        StateHasChanged();    }    await base.OnAfterRenderAsync(firstRender);}private async Task checkCaptcha(){    if(CurrentModel.requireCaptcha == false)    {        HandleValidSubmit();    }    else if (CurrentModel.requireCaptcha == true)    {        googlereCAPTCHAv3Response = await GooglereCAPTCHAv3Service.Verify(token);        CaptchaResponse = JsonSerializer.Serialize<GooglereCAPTCHAv3Response>(googlereCAPTCHAv3Response);        await JSRuntime.InvokeVoidAsync("console.log", googlereCAPTCHAv3Response);        StateHasChanged();        if (googlereCAPTCHAv3Response.score > AppSettings.Google.Captcha.CutOffScore  && googlereCAPTCHAv3Response.success == true)        {            Log.Verbose("Google reCAPTCHA v3 score passed: " + CaptchaResponse);            HandleValidSubmit();        }        else if (googlereCAPTCHAv3Response.score <= AppSettings.Google.Captcha.CutOffScore && googlereCAPTCHAv3Response.success == true)        {            Log.Verbose("Google reCAPTCHA v3 score failed: " + CaptchaResponse);            await RepoCollection.EventLog.Store(Data.EventLog.Type.ReCaptchaStart, "Google reCAPTCHA v3 score failed: " + CaptchaResponse, null, AppContext);            await JSRuntime.InvokeVoidAsync("alert", "Bot Detected");        }        else if (googlereCAPTCHAv3Response.success == false)        {            Log.Verbose("Google reCAPTCHA v3 token response failed: " + CaptchaResponse);            await RepoCollection.EventLog.Store(Data.EventLog.Type.ReCaptchaStart, "Google reCAPTCHA v3 token response failed: " + CaptchaResponse, null, AppContext);            await JSRuntime.InvokeVoidAsync("alert", "Google reCAPTCHA v3 token response failed: ");        }    }    else    {        HandleValidSubmit();    }} private async Task HandleValidSubmit() {     DisableSubmit();     var isNewxxx = UserSession.xxxx == Guid.Empty;     //Create/Update app     if (await StartService.SaveStart(CurrentModel))     {         if (googlereCAPTCHAv3Response.score > AppSettings.Google.Captcha.CutOffScore && googlereCAPTCHAv3Response.success == true)         {             await GooglereCAPTCHAv3Service.SendRisk(googlereCAPTCHAv3Response, UserSession, RepoCollection);             await RepoCollection.EventLog.Store(Data.EventLog.Type.ReCaptchaStart, "Google reCAPTCHA v3 score passed: " + CaptchaResponse, UserSession.xxxx, xxxxx);             token = "";         }         if (isNewApp)              await RepoCollection.EventLog.Store(Data.EventLog.Type.AppStart, null, UserSession.xxxx, AppContext);         if (UserSession.Internal)              NavigationManager.NavigateTo($"/name");         else              NavigationManager.NavigateTo($"/otpmethod");      }      else         HandleDatabaseError(); }

googlereCaptcha.js

function runCaptcha(googleCaptchaSiteKey, page) {    return new Promise((resolve, reject) => {        grecaptcha.ready(function () {            grecaptcha.execute(googleCaptchaSiteKey, { action: page }).then(function (token) {                resolve(token);            });        });    });};

GooglereCAPTCHAv3Service

  public virtual async Task<GooglereCAPTCHAv3Response?> Verify(string token)  {      GooglereCAPTCHAv3Response? reCaptchaResponse;      using (var httpClient = new HttpClient())      {          var appsettings = AppSettings.xxxxx();          var content = new FormUrlEncodedContent(new[] {              new KeyValuePair<string, string>("secret", appsettings.Google.Captcha.SecretKey),              new KeyValuePair<string, string>("response", token),          });          try          {              var response = await httpClient.PostAsync($"https://www.google.com/recaptcha/api/siteverify", content);              var jsonString = await response.Content.ReadAsStringAsync();              reCaptchaResponse = JsonSerializer.Deserialize<GooglereCAPTCHAv3Response>(jsonString);              Console.WriteLine(reCaptchaResponse);              if (appsettings.Google.Captcha.CaptchaTestingMode.On == true)              {                  reCaptchaResponse.score = appsettings.Google.Captcha.CaptchaTestingMode.TestingScore;                  reCaptchaResponse.success = appsettings.Google.Captcha.CaptchaTestingMode.TokenSuccess;              }          }          catch (Exception)          {              throw;          }          content = null;          return reCaptchaResponse;      }  }

InviteJoint.razor

 protected override async Task OnInitializedAsync() {     SaveMessage = "";     ValidationError = "";     Render = await ShouldRenderCustom();     // Init     if (AppSettings.JointInviteFeatureOn)         xxxxxxx = JointInfoMethod.xxxxxx;     else         xxxxxxx = JointInfoMethod.xxxxxx;     if (Render)     {         if (AppSettings.Google.Captcha.AlwaysOn == true && AppSettings.Google.Captcha.Toggle == true)         {             JointModel.requireCaptcha = true;         }         if (JointModel.requireCaptcha)         {             token = await JSRuntime.InvokeAsync<string>("runCaptcha", AppSettings.Google.Captcha.SiteKey, "joint");             await JSRuntime.InvokeVoidAsync("console.log", token);         }     }     else         NavigationManager.NavigateTo($"/");     await base.OnInitializedAsync(); }private async Task CheckCaptcha() {     if (JointModel.requireCaptcha == false)     {         HandleValidSubmit();     }     else if (JointModel.requireCaptcha == true)     {         googlereCAPTCHAv3Response = await GooglereCAPTCHAv3Service.Verify(token);         CaptchaResponse = JsonSerializer.Serialize<GooglereCAPTCHAv3Response>(googlereCAPTCHAv3Response);         await JSRuntime.InvokeVoidAsync("console.log", googlereCAPTCHAv3Response);         StateHasChanged();         if (googlereCAPTCHAv3Response.score > AppSettings.Google.Captcha.CutOffScore && googlereCAPTCHAv3Response.success == true)         {             Log.Verbose("Google reCAPTCHA v3 score passed: " + CaptchaResponse);             HandleValidSubmit();         }         else if (googlereCAPTCHAv3Response.score <= AppSettings.Google.Captcha.CutOffScore && googlereCAPTCHAv3Response.success == true)         {             Log.Verbose("Google reCAPTCHA v3 score failed: " + CaptchaResponse);             await RepoCollection.EventLog.Store(Data.EventLog.Type.ReCaptchaJoint, "Google reCAPTCHA v3 score failed: " + CaptchaResponse, null, AppContext);             await JSRuntime.InvokeVoidAsync("alert", "Bot Detected");         }         else if (googlereCAPTCHAv3Response.success == false)         {             Log.Verbose("Google reCAPTCHA v3 token response failed: " + CaptchaResponse);             await RepoCollection.EventLog.Store(Data.EventLog.Type.ReCaptchaJoint, "Google reCAPTCHA v3 token response failed: " + CaptchaResponse, null, AppContext);             await JSRuntime.InvokeVoidAsync("alert", "Google reCAPTCHA v3 token response failed: ");         }     }     else     {         HandleValidSubmit();     } }private async Task HandleValidSubmit() {     if (googlereCAPTCHAv3Response.score > AppSettings.Google.Captcha.CutOffScore && googlereCAPTCHAv3Response.success == true)     {         await GooglereCAPTCHAv3Service.SendRisk(googlereCAPTCHAv3Response, UserSession, RepoCollection);         await RepoCollection.EventLog.Store(Data.EventLog.Type.ReCaptchaStart, "Google reCAPTCHA v3 score passed: " + CaptchaResponse, UserSession.AppId, AppContext);         token = "";     }     if (xxxxxx == JointInfoMethod.xxxxxx &&  string.IsNullOrEmpty(JointModel.xxxxx))     {         ValidationError = "Please provide a xxxxxx.";         await Task.Delay(5000);         ValidationError = "";         StateHasChanged();         return;     }     if (xxxxxx == JointInfoMethod.xxxxxx && string.IsNullOrEmpty(JointModel.xxxx))     {         ValidationError = "Please provide an xxxxxx.";         await Task.Delay(5000);         ValidationError = "";         StateHasChanged();         return;     }     if (xxxxxx == JointInfoMethod.xxxxxx)         await xxxxxxx();      else         await xxxxxxx();       EnableSubmit(); }

Response from start page:

Objectaction:"start"challenge_ts:"2024-11-19T15:37:13Z"hostname:"localhost"score:0.9success:true

Response from InviteJoint page

{"success": false,"score": 0,"action": null,"challenge_ts": "0001-01-01T00:00:00","hostname": null}


Viewing all articles
Browse latest Browse all 4839

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>