Skip to main content

Black Friday 2025! Only until December 1st: coupon FRIDAY25 for 40% off Yearly/Lifetime membership!

Read more here

JustinByrne/Mealing

99 stars
3 code files
View JustinByrne/Mealing on GitHub

composer.json

Open in GitHub
{
//
"require": {
"php": "^7.3|^8.0",
//
"google/recaptcha": "^1.2",
},
//
}

app/Rules/RecaptchaRule.php

Open in GitHub
use Illuminate\Contracts\Validation\Rule;
use ReCaptcha\ReCaptcha;
 
class RecaptchaRule implements Rule
{
private $errors;
 
public function passes($attribute, $value)
{
if (config('recaptcha.testing') || config('recaptcha.testing') !== null) {
return true;
}
 
$rScore = 0.5;
 
if (empty($value)) {
$this->errors = ':atrribute field is required';
 
return false;
}
 
$recaptcha = new Recaptcha(config('recaptcha.secret_key'));
 
$resp = $recaptcha->setExpectedHostname($_SERVER['HTTP_HOST'])
->setScoreThreshold($rScore)
->verify($value, $_SERVER['REMOTE_ADDR']);
 
if (!$resp->isSuccess()) {
$this->errors = $resp->getErrorCodes();
 
return false;
}
 
if ($resp->getScore() < $rScore) {
$this->errors = 'Failed to valildate ReCaptcha';
 
return false;
}
 
return true;
}
 
public function message()
{
return $this->errors;
}
}

app/Http/Requests/AuthLoginRequest.php

Open in GitHub
use Illuminate\Foundation\Http\FormRequest;
use App\Rules\RecaptchaRule;
 
class AuthLoginRequest extends FormRequest
{
//
public function rules()
{
return [
'email' => 'required',
'password' => 'required',
'recaptcha_token' => ['required', new RecaptchaRule($this->recaptcha_token) ],
];
}
//
}

We'd Love Your Feedback

Tell us what you like or what we can improve

Feel free to share anything you like or dislike about this page or the platform in general.