Explorar o código

Авторизация через Email

Stas hai 4 semanas
pai
achega
1517533a9a

+ 6 - 7
app/Http/Controllers/Admin/LoginController.php

@@ -8,8 +8,7 @@
  *           POST /admin/login → login()
  *           POST /admin/logout → logout()
  *
- * Особенность: вход по полю 'name' (логин), а не email.
- * Laravel Auth по умолчанию ищет по email — здесь credentials передаются вручную.
+ * Вход по email (стандартный способ Laravel Auth).
  * После успешной авторизации проверяется флаг is_admin: если false — сессия сбрасывается.
  */
 
@@ -35,19 +34,19 @@ class LoginController extends Controller
     }
 
     // Обработка формы входа
-    // Auth::attempt(['name' => ...]) — нестандартно, по умолчанию Laravel ищет по email
+    // Auth::attempt(['email' => ...]) — стандартный способ Laravel через email
     // После входа проверяется is_admin: если false — немедленный Auth::logout()
     // session()->regenerate() — защита от session fixation атаки
     // redirect()->intended() — редирект на URL куда шёл до входа, иначе на дашборд
     public function login(Request $request): RedirectResponse
     {
         $request->validate([
-            'login' => ['required', 'string'],
+            'email' => ['required', 'email'],
             'password' => ['required', 'string'],
         ]);
 
         $credentials = [
-            'name' => $request->login,
+            'email' => $request->email,
             'password' => $request->password,
         ];
 
@@ -62,8 +61,8 @@ class LoginController extends Controller
         }
 
         return back()->withErrors([
-            'login' => 'Неверный логин или пароль.',
-        ])->onlyInput('login');
+            'email' => 'Неверный email или пароль.',
+        ])->onlyInput('email');
     }
 
     // Выход: invalidate() уничтожает сессию, regenerateToken() обновляет CSRF-токен

+ 2 - 1
app/Http/Controllers/Admin/SettingAdminController.php

@@ -32,7 +32,7 @@ class SettingAdminController extends Controller
         // Open Graph
         'og_site_name', 'og_description', 'og_locale',
         // Режим сайта (хранятся как '1'/'0')
-        'site_maintenance', 'site_noindex',
+        'site_maintenance', 'site_noindex', 'disable_animations',
     ];
 
     private const LOGO_KEYS = ['logo_header', 'logo_footer'];
@@ -65,6 +65,7 @@ class SettingAdminController extends Controller
             // Режим сайта
             'site_maintenance' => 'nullable|in:0,1',
             'site_noindex' => 'nullable|in:0,1',
+            'disable_animations' => 'nullable|in:0,1',
             // Файлы
             'logo_header' => 'nullable|image|mimes:png,jpg,svg,webp|max:512',
             'logo_footer' => 'nullable|image|mimes:png,jpg,svg,webp|max:512',

+ 8 - 8
resources/views/admin/login.blade.php

@@ -3,7 +3,7 @@
     Создана: 2026-05-06
     Контроллер: Admin\LoginController::showLoginForm() / login()
     Макет: adminlte::auth.auth-page — встроенный шаблон AdminLTE для страниц авторизации
-    Поля: login (по полю name пользователя, не email!), password, remember
+    Поля: email, password, remember
     Стили: icheck-bootstrap для чекбокса "Запомнить меня"
 --}}
 @extends('adminlte::auth.auth-page', ['authType' => 'login'])
@@ -18,19 +18,19 @@
     <form action="{{ route('admin.login') }}" method="post">
         @csrf
 
-        {{-- Login field --}}
+        {{-- Email field --}}
         <div class="input-group mb-3">
-            <input type="text" name="login"
-                class="form-control @error('login') is-invalid @enderror"
-                value="{{ old('login') }}"
-                placeholder="Логин"
+            <input type="email" name="email"
+                class="form-control @error('email') is-invalid @enderror"
+                value="{{ old('email') }}"
+                placeholder="Email"
                 autofocus>
             <div class="input-group-append">
                 <div class="input-group-text">
-                    <span class="fas fa-user"></span>
+                    <span class="fas fa-envelope"></span>
                 </div>
             </div>
-            @error('login')
+            @error('email')
                 <span class="invalid-feedback" role="alert">
                     <strong>{{ $message }}</strong>
                 </span>

+ 1 - 0
resources/views/admin/settings/index.blade.php

@@ -172,6 +172,7 @@
                         <hr>
                         <p><strong>Обслуживание</strong> — заглушка для гостей и редакторов</p>
                         <p><strong>Noindex</strong> — запрет индексации поисковиками</p>
+                        <p><strong>Анимации</strong> — class="no-animations" на &lt;body&gt;, reveal-блоки видны сразу</p>
                         <hr>
                         <p class="mb-0 text-info">
                             <i class="fas fa-info-circle"></i>

+ 29 - 0
resources/views/admin/settings/partials/_card_site_mode.blade.php

@@ -43,6 +43,35 @@
 
         <hr>
 
+        {{-- Отключить JS-анимации --}}
+        <div class="form-group">
+            <div class="d-flex align-items-start">
+                <div class="mr-3 mt-1">
+                    <input type="hidden" name="disable_animations" value="0">
+                    <div class="custom-control custom-switch custom-switch-lg">
+                        <input type="checkbox" class="custom-control-input" id="disable_animations"
+                               name="disable_animations" value="1"
+                               {{ ($settings['disable_animations'] ?? '0') === '1' ? 'checked' : '' }}>
+                        <label class="custom-control-label" for="disable_animations"></label>
+                    </div>
+                </div>
+                <div>
+                    <div class="font-weight-bold">
+                        Отключить анимации на сайте
+                        @if(($settings['disable_animations'] ?? '0') === '1')
+                            <span class="badge badge-secondary ml-1">ВЫКЛЮЧЕНО</span>
+                        @endif
+                    </div>
+                    <small class="text-muted">
+                        Убирает scroll-reveal эффекты появления блоков при прокрутке.
+                        Элементы отображаются сразу, без задержек и плавных переходов.
+                    </small>
+                </div>
+            </div>
+        </div>
+
+        <hr>
+
         {{-- Запрет индексации --}}
         <div class="form-group mb-0">
             <div class="d-flex align-items-start">