handle allert login

This commit is contained in:
baghizadizn 2025-11-11 10:10:00 +07:00
parent 1aaa24a4d7
commit 3a595abfd2
6 changed files with 326 additions and 210 deletions

View File

@ -49,6 +49,12 @@ class AuthenticatedSessionController extends Controller
{
$input = $request->all();
// Manual validation check before proceeding
if (empty($input['email']) || empty($input['password'])) {
Session::flash('error', get_phrase('Email or password is empty. Please fill in all the required fields.'));
return redirect(route('login'))->withInput();
}
if (get_frontend_settings('recaptcha_status') == true && check_recaptcha($input['g-recaptcha-response']) == false) {
Session::flash('error', get_phrase('Recaptcha verification failed'));

View File

@ -6,8 +6,11 @@ use Illuminate\Auth\Events\Lockout;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
use Illuminate\Support\Facades\Validator;
class LoginRequest extends FormRequest
{
@ -32,20 +35,48 @@ class LoginRequest extends FormRequest
];
}
public function messages()
{
return [
'email.required' => get_phrase('Email is required'),
'password.required' => get_phrase('Password is required'),
'email.email' => get_phrase('Please enter a valid email address'),
];
}
public function withValidator($validator)
{
$validator->after(function ($validator) {
if ($validator->failed()) {
Session::flash('error', get_phrase('Please fill in all the required fields correctly.'));
}
});
}
/**
* Attempt to authenticate the request's credentials.
*
* @throws \Illuminate\Validation\ValidationException
*/
public function authenticate(): void
public function authenticate()
{
$this->ensureIsNotRateLimited();
// Custom validation before attempting login
if (empty($this->email) || empty($this->password)) {
Session::flash('error', get_phrase('Email or password is empty. Please fill in all the required fields.'));
throw ValidationException::withMessages([
'email' => '', // Empty message to avoid default validation messages
]);
}
if (!Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
RateLimiter::hit($this->throttleKey());
Session::flash('error', get_phrase('Login failed. Please check your email and password.'));
throw ValidationException::withMessages([
'email' => trans('auth.failed'),
'email' => '', // Empty message to avoid default validation messages
]);
}

View File

@ -765,8 +765,8 @@ img {
.Userprofile .dropmenu-end a:hover svg path,
.Userprofile .dropmenu-end a:hover {
color: #c664ff;
fill: #c664ff;
color: var(--color-1);
fill: var(--color-1);
}
.Userprofile .dropmenu-end a i {
@ -3179,7 +3179,7 @@ html .ui-button.ui-state-disabled:active {
}
.c-card:hover .eBtn {
background-image: linear-gradient( to right, #2f57ef 0%, #c664ff 51%, #c664ff 100%);
background-image: linear-gradient(45deg, rgba(2, 25, 110, 1) 0%, rgba(2, 25, 110, 1) 13%, rgba(217, 217, 217, 1) 65%, rgba(255, 255, 255, 1) 98%);
background-size: 200% auto;
box-shadow: 0 0 20px #eee;
transition: 0.5s;
@ -4500,10 +4500,10 @@ html .ui-button.ui-state-disabled:active {
}
.gradient-border-btn:hover {
background-image: linear-gradient( to right, #2f57ef 0%, #c664ff 51%, #c664ff 100%);
color: var(--color-white);
background: #fff;
background-position: right center;
color: #001151;
border-color: transparent;
background-position: center;
}
.footer-widget h4 {
@ -4524,11 +4524,12 @@ html .ui-button.ui-state-disabled:active {
margin-bottom: 16px;
font-size: 15px;
font-weight: 400;
transition: 0.5s;
transition: font-weight 0.3s ease;
}
.footer-widget ul li a:hover {
color: var(--color-1);
transform: scale(1.02);
font-weight: 600;
}
.newslater-bottom p {
@ -4599,6 +4600,12 @@ html .ui-button.ui-state-disabled:active {
font-size: 13px;
font-weight: 400;
color: #dedede;
transition: all 0.3s ease;
}
.footer-policy li a:hover {
transform: scale(1.02);
color: #ffffff;
}
.copyright-text {
@ -5582,7 +5589,7 @@ ul.my-bootcamps li:nth-last-child(1) {
}
.Userprofile .dropmenu-end a.bootcamp-menu-icon:hover svg path {
stroke: #c664ff;
stroke: var(--color-1);
fill: none;
}

View File

@ -1,4 +1,5 @@
/*Font Size*/
.text-20px {
font-size: 20px !important;
}
@ -51,7 +52,9 @@
font-size: 8px !important;
}
/*Bootstrap toaster*/
.search-box {
position: relative;
margin-bottom: 30px;
@ -110,12 +113,7 @@
}
.gradient {
background-image: linear-gradient(
to right,
#2f57ef 0%,
#c664ff 51%,
#c664ff 100%
);
background-image: inear-gradient(45deg, rgba(2, 25, 110, 1) 0%, rgba(2, 25, 110, 1) 13%, rgba(217, 217, 217, 1) 65%, rgba(255, 255, 255, 1) 98%);
transition: 0.5s;
background-size: 200% auto;
box-shadow: 0 0 20px #eee;
@ -123,7 +121,7 @@
.gradient:hover {
background-position: right center;
color: #fff;
color: #001151;
text-decoration: none;
}
@ -327,11 +325,13 @@
width: 20px;
height: 20px;
}
.playing-header-btns>a {
min-height: 40px;
display: flex !important;
align-items: center;
}
.image-100 {
min-width: 100px !important;
width: 100px !important;
@ -387,6 +387,7 @@
border-radius: 50% !important;
object-fit: cover !important;
}
.max-w-auto {
max-width: auto;
}

File diff suppressed because it is too large Load Diff

View File

@ -7,6 +7,10 @@
right: 20px;
cursor: pointer !important;
}
.alert {
border-radius: 8px;
margin-bottom: 20px;
}
</style>
@endpush
@section('content')
@ -27,15 +31,25 @@
<p class="description">{{ get_phrase('See your growth and get consulting support!') }} </p>
<div class="form-group">
<label for="email" class="form-label">{{ get_phrase('Email') }}</label>
<input type="email" id="email" name="email" class="form-control" placeholder="{{ get_phrase('Your Email') }}">
<input type="email" id="email" name="email" class="form-control @error('email') is-invalid @enderror" placeholder="{{ get_phrase('Your Email') }}" value="{{ old('email') }}" required>
@error('email')
<div class="invalid-feedback">
{{ $message == 'validation.required' ? get_phrase('Email is required') : $message }}
</div>
@enderror
</div>
<div class="form-group">
<label for="" class="form-label">{{ get_phrase('Password') }}</label>
<input type="password" id="password" name="password" class="form-control" placeholder="*********">
<input type="password" id="password" name="password" class="form-control @error('password') is-invalid @enderror" placeholder="*********" required>
@error('password')
<div class="invalid-feedback">
{{ $message == 'validation.required' ? get_phrase('Password is required') : $message }}
</div>
@enderror
</div>
<div class="form-group mb-25 d-flex justify-content-between align-items-center remember-me">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="flexCheckChecked" checked>
<input class="form-check-input" type="checkbox" name="remember" id="flexCheckChecked" {{ old('remember') ? 'checked' : '' }}>
<label class="form-check-label" for="flexCheckChecked">{{ get_phrase('Remember Me') }}</label>
</div>
<a href="{{route('password.request')}}">{{ get_phrase('Forget Password?') }}</a>
@ -50,11 +64,6 @@
<p class="mt-20">{{ get_phrase('Not have an account yet?') }}
<a href="{{ route('register.form') }}">{{ get_phrase('Create Account') }}</a>
</p>
{{-- <p class="my-3">Login As -</p>
<button type="button" class="eBtn gradient w-100 mb-3 py-3 custom-btn" id="admin">Admin</button>
<button type="button" class="eBtn gradient w-100 mb-3 py-3 custom-btn" id="student">Student</button>
<button type="button" class="eBtn gradient w-100 mb-3 py-3 custom-btn" id="instructor">Instructor</button> --}}
</form>
</div>
</div>
@ -64,10 +73,13 @@
@endif
@endsection
@push('js')
<script>
"use strict";
function onLoginSubmit(token) {
document.getElementById("login-form").submit();
}
$(document).ready(function() {
$('.custom-btn').on('click', function(e) {
e.preventDefault();
@ -83,7 +95,6 @@
$('#email').val('instructor@example.com');
$('#password').val('12345678');
}
$('#login').trigger('click');
});
});
@ -99,10 +110,5 @@
}
});
});
function onLoginSubmit(token) {
document.getElementById("login-form").submit();
}
</script>
@endpush