Email cím elrejtése Recaptcha-val
2020 Feb.

A különböző oldalakat feltérképező és adatokat gyűjtő botok miatt érdemes elrejteni email címeinket, erre mutatok egy példát hogyan valósítottam meg Google Invisible Recaptcha segítségével. Az alap koncepció az, hogy a Recaptcha nem enged űrlapokat elküldeni, ha azt nem valós személy kezdeményezi, ezt tudja mindenki. Ezt felhasználva ha kérés érkezik az email cím mutatására, akkor előbb a captchának kell pozitív választ adnia, ha ez megvan, akkor adjuk vissza szerver oldalról az email címet.

 

Telepítsük az albertcht/invisible-recaptcha csomagot és állítsuk be.

 

A blade fájlunkban, ahol az email címet szeretnénk megjeleníteni, illesszük be az alábbi kódot:

{!! Form::open(['url' => '#', 'id' => '']) !!}
    @captcha('hu')
    <button type="submit" id="submit"><i class="fa fa-envelope" title="send message"></i></button>
{!! Form::close() !!}

A megjelenő boríték ikon jelzi az email küldést. Az űrlap a leírás szerint szükséges, igaz nem fogunk hasznos adatot elküldeni vele (https://github.com/albertcht/invisible-recaptcha#usage).

 

A route fájlunkban adjuk meg az alábbi bejegyzést:

Route::post('check-robot', '[email protected]');

A controllerben adjuk meg az alábbi metódust:

public function checkRobot(Request $request)
{
    $validate = Validator::make($request->all(), [
        'g-recaptcha-response' => 'required|captcha'
    ]);

    return response()->json([
        'email' => 'mailto:[email protected]?subject='.urlencode('Message from the website')
    ]);
}

A checkRobot metódus ellenőrzi a recaptcha helyességét és ha nem érzékel botot vagy "megfejtjük a feladványt" akkor egy email címmel válaszol.

 

Ezt a metódust az alábbi javascript kód hívja meg ajax hívással. A _submitEvent egy, az Invisible Recaptcha csomag által szolgáltatott esemény, amellyel a hivás után még tudunk egyéb feladatot végrehajtani. Jelen esetben megadjuk a böngészőnek, hogy nyissa meg az alapértelmezett email kliensünket a megadott email címmel.

  _submitEvent = function() {
    $.ajax({
      type: "POST",
      url: "/check-robot",
      data: {
        "_token": "{{ csrf_token() }}",
        "g-recaptcha-response": $("#g-recaptcha-response").val()
      },
      dataType: "json",
      success: function(data) {
        window.location = data.email;
      },
      error: function(data) {
        console.log('error');
      }
    });
  };

Ez által nem is kerül rejtett email címünk a botok kezébe.