[localhost] Using reCAPTCHA on localhost

I'm developing a website using PHP and I want to make a human verification in one of the sessions. For the development, I'm initially running the system locally and when it is ready, I'm gonna make put it on in a certain domain.

In the reCAPTCHA website it is said that the plugin will only work at the given domain (and subdomains).

My question is: Is there any way to use the reCAPTCHA plugin on a localhost?

This question is related to localhost recaptcha

The answer is


Yes, this an older question but this may be helping all the users having problems with reCaptcha on localhost. Google indeed says "By default, all keys work on 'localhost' (or '127.0.0.1')" but for real using reCaptcha on localhost may cause problems. In my case I solved mine using secure token

I posted a WORKING SOLUTION for PHP here


To your domains list of google recaptcha website add - https://www.google.com/recaptcha/admin/site/{siteid}/settings

LOCALHOST
if above doesn't work try adding 127.0.0.1 too


As per Google recaptcha documentation

localhost domains are no longer supported by default. If you wish to continue supporting them for development you can add them to the list of supported domains for your site key. Go to the admin console to update your list of supported domains. We advise to use a separate key for development and production and to not allow localhost on your production site key


This worked for me:

"With the following test keys, you will always get No CAPTCHA and all verification requests will pass.

Site key: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI

Secret key: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe

The reCAPTCHA widget will show a warning message to claim that it's only for testing purpose. Please do not use these keys for your production traffic."

Extracted from here: https://developers.google.com/recaptcha/docs/faq#id-like-to-run-automated-tests-with-recaptcha.-what-should-i-do

BR!


i got error related to recaptcha in laravel website, i resolved it by using some command and with env file and above answer will also help in this problem.

first of all check env file(in your case file which has google recaptcha key) for google recpatcha key.

second run these command :

  1. php artisan config:clear
  2. php artisan cache:clear
  3. composer dump-autoload
  4. php artisan view:clear
  5. php artisan route:clear

    it will solve your problem


The way that worked for me, was to use my external IP Address.

If you don't know what it is, just google What's My IP

Then use your IP address and set this in your domains for the captcha and it should start working ok.


It's so easy:

  1. Go to your google reCaptcha admin panel
  2. Add localhost & 127.0.0.1 to domains of a new site like the following image.

enter image description here


Update:

If your question is how to set reCaptcha in Google site for using it in localhost, then i has been wrote it above but if you are curious that how you can using reCAPTCHA on both localhost and website host by minimal codes in your controller and prevent some codes like ConfigurationManager.AppSettings["ReCaptcha:SiteKey"] in it then I help you with this extra description and codes in my answer.

Do you like the following GET and POST actions?

It support reCaptcha and doesn't need any other codes for handling reCaptcha.

[HttpGet]
[Recaptcha]
public ActionResult Register()
{
    // Your codes in GET action
}

[HttpPost]
[Recaptcha]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterViewModel model, string reCaptcha_SecretKey){
   // Your codes in POST action
   if (!ModelState.IsValid || !ReCaptcha.Validate(reCaptcha_SecretKey))
   {
       // Your codes
   }
   // Your codes
}

In View: (reference)

@ReCaptcha.GetHtml(@ViewBag.publicKey)

@if (ViewBag.RecaptchaLastErrors != null)
{
    <div>Oops! Invalid reCAPTCHA =(</div>
}

To use it

A) Add the following ActionFilter to your Web project:

public class RecaptchaAttribute : FilterAttribute, IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var setting_Key = filterContext.HttpContext.Request.IsLocal ? "ReCaptcha_Local" : "ReCaptcha";
        filterContext.ActionParameters["ReCaptcha_SecretKey"] = ConfigurationManager.AppSettings[$"{setting_Key}:SecretKey"];
    }

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var setting_Key = filterContext.HttpContext.Request.IsLocal ? "ReCaptcha_Local" : "ReCaptcha";
        filterContext.Controller.ViewBag.Recaptcha = ReCaptcha.GetHtml(publicKey: ConfigurationManager.AppSettings[$"{setting_Key}:SiteKey"]);
        filterContext.Controller.ViewBag.publicKey = ConfigurationManager.AppSettings[$"{setting_Key}:SiteKey"];
    }
}

B) Add the reCaptcha settings keys for both localhost & website like it in your webconfig file:

<appSettings>

    <!-- RECAPTCHA SETTING KEYS FOR LOCALHOST -->
    <add key="ReCaptcha_Local:SiteKey" value="[Localhost SiteKey]" />
    <add key="ReCaptcha_Local:SecretKey" value="[Localhost SecretKey]" />
    <!-- RECAPTCHA SETTING KEYS FOR WEBSITE -->
    <!--<add key="ReCaptcha:SiteKey" value="[Webite SiteKey]" />
    <add key="ReCaptcha:SecretKey" value="[Webite SecretKey]" />-->

    <!-- OTHER SETTING KEYS OF YOUR PROJECT -->

</appSettings>

Note: By this way you did not need set reCaptcha_SecretKey parameter in the post action or any ViewBag for reCaptcha manually in your Actions and Views, all of them will be filled automatically at runtime with appropriate values depending on you have run the project on the localhost or website.


when you add Domains in Google recaptcha

Add new domain: Localhost not localhost

"L" is capital letter

Good luck


For testing purposes, if you want to test your web page which includes reCaptcha on localhost then add localhost in domain list by Admin Console 1: https://www.google.com/recaptcha/admin. *It is advised to create a separate site key for localhost.

Admin Console Screenshot

Captcha Output

Thanks :)


Remove current REcaptcha key, then register new key and set your key settings with domains: 127.0.0.1 localhost


Google has recently changed stopped allowing localhost being allowed by default. (as touched upon by @Artur Cesar De Melo)This is under their FAQ's:

I'm getting an error "Localhost is not in the list of supported domains". This was working before, what should I do?

localhost domains are no longer supported by default. If you wish to continue supporting them for development you can add them to the list of supported domains for your site key. Go to the admin console to update your list of supported domains. We advise to use a separate key for development and production and to not allow localhost on your production site key.

1: Create a separate key for your development environment

2: Add 127.0.0.1 to the list of allowed domains

3: Save changes and allow up to 30 mins for changes to take affect


If you have old key, you should recreate your API Key. Also be aware of proxies.


For me, it worked deleting my actual configuration and creating a new one, adding domains like this:

enter image description here


Recaptcha will not work on localhost/

Use `127.0.0.1/` instead of `localhost/`

As of January 2nd, 2021, Google posted these two keys for testing in this article.

I'd like to run automated tests with reCAPTCHA. What should I do? For reCAPTCHA v3, create a separate key for testing environments. Scores may not be accurate as reCAPTCHA v3 relies on seeing real traffic.

For reCAPTCHA v2, use the following test keys. You will always get No CAPTCHA and all verification requests will pass.

Site key: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
Secret key: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe

The reCAPTCHA widget will show a warning message to ensure it's not used for production traffic.

The generated emails went into spam the first time I used the keys.


Please note that as of 2016, ReCaptcha doesn't naively support localhost anymore. From the FAQ:

localhost domains are no longer supported by default. If you wish to continue supporting them for development you can add them to the list of supported domains for your site key. Go to the admin console to update your list of supported domains. We advise to use a separate key for development and production and to not allow localhost on your production site key.

So just add localhost to your list of domains for your site and you'll be good.


  1. Register your website at – https://www.google.com/recaptcha/admin
  2. add js plugin 3.add class and your site-key provived by google enter image description here
<script src='https://www.google.com/recaptcha/api.js'></script>
 <div class="g-recaptcha" data-sitekey="your site-key"></div>

I was recently working on creating a website involving recaptcha v2 and I have a need to do test automation on my localhost. I did not add any ip or localhost into recaptcha admin portal.

Follow the below steps

  1. Log in to recaptcha admin site screenshot

  2. Locate Key Settings

  3. Click on advanced settings

  4. Under Domain Name Validation, un-check Verify the origin of reCAPTCHA solutions checkbox. This option is used to verifying requests come from one of the above listed domains.

    Please note that, If disabled, you are required to check the host-name on your server when verifying a solution.


I created a new key and disable this and use this key for testing in localhost.

This is a sample page which implements reCAPTCHA for comments.


localhost works now. However, remember that after adding localhost to list of domain names, it takes up to 30 minutes to take effect (according to the help tip shown against the domain names list).


You can write "localhost" or "127.0.0.1" but URL must be the same

Example : Google Domains Add-> localhost URL => localhost/login.php

Example : Google Domains Add-> 127.0.0.1 URL => 127.0.0.1/login.php


If you are using Laravel then you should restart your serve and run the following two command

php artisan config:clear

php artisan cache:clear