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', 'MyController@checkRobot');
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:info@email.com?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.