feat: add recaptcha
This commit is contained in:
parent
607f83d3c6
commit
688a764ea6
@ -23,11 +23,11 @@ public function login(){
|
||||
public function loginAction(LoginRequest $request){
|
||||
$validatedData = $request->validated();
|
||||
|
||||
if(Auth::attempt($validatedData)){
|
||||
if(Auth::attempt(['email' => $validatedData['email'], 'password' => $validatedData['password']])){
|
||||
$request->session()->regenerate();
|
||||
return redirect()->intended('/dashboard/overview');
|
||||
}else{
|
||||
return redirect()->back()->with('failed-status', 'Pastikan data benar dan akun sudah terdaftar.');
|
||||
return redirect()->back()->with('failed-status', 'Pastikan data dan akun sudah terdaftar.');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -28,7 +28,8 @@ public function rules(): array
|
||||
'password' => ['required' => Password::min(8)
|
||||
->mixedCase()
|
||||
->numbers()
|
||||
->symbols()]
|
||||
->symbols()],
|
||||
'g-recaptcha-response' => 'recaptcha',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.2",
|
||||
"biscolab/laravel-recaptcha": "^6.1",
|
||||
"laravel/framework": "^11.31",
|
||||
"laravel/tinker": "^2.9",
|
||||
"maatwebsite/excel": "^3.1",
|
||||
|
||||
74
composer.lock
generated
74
composer.lock
generated
@ -4,8 +4,80 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "5c58a50b4393d487354e2e3d976a3d16",
|
||||
"content-hash": "3c05bddedb1d2b1f538ace6db6f4b8d1",
|
||||
"packages": [
|
||||
{
|
||||
"name": "biscolab/laravel-recaptcha",
|
||||
"version": "v6.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/biscolab/laravel-recaptcha.git",
|
||||
"reference": "440fc617cba9f39aab7fda5d7697b76a55286e31"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/biscolab/laravel-recaptcha/zipball/440fc617cba9f39aab7fda5d7697b76a55286e31",
|
||||
"reference": "440fc617cba9f39aab7fda5d7697b76a55286e31",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/routing": "^7.0|^8.0|^9.0|^10.0|^11.0",
|
||||
"illuminate/support": "^7.0|^8.0|^9.0|^10.0|^11.0",
|
||||
"php": "^7.3|^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"orchestra/testbench": "5.*|6.*|^7.0|^8.0|^9.0",
|
||||
"phpunit/phpunit": "^9.1|^10.5"
|
||||
},
|
||||
"suggest": {
|
||||
"biscolab/laravel-authlog": "It allows to handle logged-in users and force log-out if needed"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Biscolab\\ReCaptcha\\ReCaptchaServiceProvider"
|
||||
],
|
||||
"aliases": {
|
||||
"ReCaptcha": "Biscolab\\ReCaptcha\\Facades\\ReCaptcha"
|
||||
}
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/helpers.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Biscolab\\ReCaptcha\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Roberto Belotti",
|
||||
"email": "roby.belotti@gmail.com",
|
||||
"homepage": "https://biscolab.com",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Simple and painless Google reCAPTCHA package for Laravel framework",
|
||||
"homepage": "https://biscolab.com/laravel-recaptcha",
|
||||
"keywords": [
|
||||
"captcha",
|
||||
"laravel",
|
||||
"recaptcha",
|
||||
"validation"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/biscolab/laravel-recaptcha/issues",
|
||||
"source": "https://github.com/biscolab/laravel-recaptcha/tree/v6.1.0"
|
||||
},
|
||||
"abandoned": true,
|
||||
"time": "2024-03-27T11:06:21+00:00"
|
||||
},
|
||||
{
|
||||
"name": "brick/math",
|
||||
"version": "0.12.3",
|
||||
|
||||
179
config/recaptcha.php
Normal file
179
config/recaptcha.php
Normal file
@ -0,0 +1,179 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Copyright (c) 2017 - present
|
||||
* LaravelGoogleRecaptcha - recaptcha.php
|
||||
* author: Roberto Belotti - roby.belotti@gmail.com
|
||||
* web : robertobelotti.com, github.com/biscolab
|
||||
* Initial version created on: 12/9/2018
|
||||
* MIT license: https://github.com/biscolab/laravel-recaptcha/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
/**
|
||||
* To configure correctly please visit https://developers.google.com/recaptcha/docs/start
|
||||
*/
|
||||
return [
|
||||
|
||||
/**
|
||||
*
|
||||
* The site key
|
||||
* get site key @ www.google.com/recaptcha/admin
|
||||
*
|
||||
*/
|
||||
'api_site_key' => env('RECAPTCHA_SITE_KEY', ''),
|
||||
|
||||
/**
|
||||
*
|
||||
* The secret key
|
||||
* get secret key @ www.google.com/recaptcha/admin
|
||||
*
|
||||
*/
|
||||
'api_secret_key' => env('RECAPTCHA_SECRET_KEY', ''),
|
||||
|
||||
/**
|
||||
*
|
||||
* ReCATCHA version
|
||||
* Supported: "v2", "invisible", "v3",
|
||||
*
|
||||
* get more info @ https://developers.google.com/recaptcha/docs/versions
|
||||
*
|
||||
*/
|
||||
'version' => 'v2',
|
||||
|
||||
/**
|
||||
*
|
||||
* The curl timout in seconds to validate a recaptcha token
|
||||
* @since v3.5.0
|
||||
*
|
||||
*/
|
||||
'curl_timeout' => 10,
|
||||
|
||||
/**
|
||||
*
|
||||
* IP addresses for which validation will be skipped
|
||||
* IP/CIDR netmask eg. 127.0.0.0/24, also 127.0.0.1 is accepted and /32 assumed
|
||||
*
|
||||
*/
|
||||
'skip_ip' => env('RECAPTCHA_SKIP_IP', []),
|
||||
|
||||
/**
|
||||
*
|
||||
* Default route called to check the Google reCAPTCHA token
|
||||
* @since v3.2.0
|
||||
*
|
||||
*/
|
||||
'default_validation_route' => 'biscolab-recaptcha/validate',
|
||||
|
||||
/**
|
||||
*
|
||||
* The name of the parameter used to send Google reCAPTCHA token to verify route
|
||||
* @since v3.2.0
|
||||
*
|
||||
*/
|
||||
'default_token_parameter_name' => 'token',
|
||||
|
||||
/**
|
||||
*
|
||||
* The default Google reCAPTCHA language code
|
||||
* It has no effect with v3
|
||||
* @see https://developers.google.com/recaptcha/docs/language
|
||||
* @since v3.6.0
|
||||
*
|
||||
*/
|
||||
'default_language' => null,
|
||||
|
||||
/**
|
||||
*
|
||||
* The default form ID. Only for "invisible" reCAPTCHA
|
||||
* @since v4.0.0
|
||||
*
|
||||
*/
|
||||
'default_form_id' => 'biscolab-recaptcha-invisible-form',
|
||||
|
||||
/**
|
||||
*
|
||||
* Deferring the render can be achieved by specifying your onload callback function and adding parameters to the JavaScript resource.
|
||||
* It has no effect with v3 and invisible
|
||||
* @see https://developers.google.com/recaptcha/docs/display#explicit_render
|
||||
* @since v4.0.0
|
||||
* Supported true, false
|
||||
*
|
||||
*/
|
||||
'explicit' => false,
|
||||
|
||||
/**
|
||||
*
|
||||
* Set API domain. You can use "www.recaptcha.net" in case "www.google.com" is not accessible.
|
||||
* (no check will be made on the entered value)
|
||||
* @see https://developers.google.com/recaptcha/docs/faq#can-i-use-recaptcha-globally
|
||||
* @since v4.3.0
|
||||
* Default 'www.google.com' (ReCaptchaBuilder::DEFAULT_RECAPTCHA_API_DOMAIN)
|
||||
*
|
||||
*/
|
||||
'api_domain' => 'www.google.com',
|
||||
|
||||
/**
|
||||
*
|
||||
* Set `true` when the error message must be null
|
||||
* @since v5.1.0
|
||||
* Default false
|
||||
*
|
||||
*/
|
||||
'empty_message' => false,
|
||||
|
||||
/**
|
||||
*
|
||||
* Set either the error message or the errom message translation key
|
||||
* @since v5.1.0
|
||||
* Default 'validation.recaptcha'
|
||||
*
|
||||
*/
|
||||
'error_message_key' => 'validation.recaptcha',
|
||||
|
||||
/**
|
||||
*
|
||||
* g-recaptcha tag attributes and grecaptcha.render parameters (v2 only)
|
||||
* @see https://developers.google.com/recaptcha/docs/display#render_param
|
||||
* @since v4.0.0
|
||||
*/
|
||||
'tag_attributes' => [
|
||||
|
||||
/**
|
||||
* The color theme of the widget.
|
||||
* Supported "light", "dark"
|
||||
*/
|
||||
'theme' => 'light',
|
||||
|
||||
/**
|
||||
* The size of the widget.
|
||||
* Supported "normal", "compact"
|
||||
*/
|
||||
'size' => 'normal',
|
||||
|
||||
/**
|
||||
* The tabindex of the widget and challenge.
|
||||
* If other elements in your page use tabindex, it should be set to make user navigation easier.
|
||||
*/
|
||||
'tabindex' => 0,
|
||||
|
||||
/**
|
||||
* The name of your callback function, executed when the user submits a successful response.
|
||||
* The g-recaptcha-response token is passed to your callback.
|
||||
* DO NOT SET "biscolabOnloadCallback"
|
||||
*/
|
||||
'callback' => null,
|
||||
|
||||
/**
|
||||
* The name of your callback function, executed when the reCAPTCHA response expires and the user needs to re-verify.
|
||||
* DO NOT SET "biscolabOnloadCallback"
|
||||
*/
|
||||
'expired-callback' => null,
|
||||
|
||||
/**
|
||||
* The name of your callback function, executed when reCAPTCHA encounters an error (usually network connectivity) and cannot continue until connectivity is restored.
|
||||
* If you specify a function here, you are responsible for informing the user that they should retry.
|
||||
* DO NOT SET "biscolabOnloadCallback"
|
||||
*/
|
||||
'error-callback' => null,
|
||||
]
|
||||
];
|
||||
@ -156,3 +156,8 @@ .pdf-label{
|
||||
font-size: 0.6rem !important;
|
||||
color: grey !important;
|
||||
}
|
||||
|
||||
.captcha-error {
|
||||
border: 2px dotted red;
|
||||
padding: 0.5rem 0rem !important;
|
||||
}
|
||||
|
||||
@ -69,6 +69,14 @@
|
||||
<span class="auth-validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div><!-- .form-group -->
|
||||
{!! ReCaptcha::htmlScriptTagJsApi() !!}
|
||||
<div class="form-group row mt-1">
|
||||
<div
|
||||
class="col-md-12 d-flex justify-content-center @error('g-recaptcha-response')
|
||||
captcha-error
|
||||
@enderror">
|
||||
{!! htmlFormSnippet() !!} </div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<button class="btn btn-lg btn-primary btn-block">Masuk</button>
|
||||
</div>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user