Как отобразить ошибки в модальной форме входа в систему, когда пользователь вводит неверные учетные данные в Laravel 5.6? - PullRequest
0 голосов
/ 03 июня 2018

В Laravel 5.6 я использую функцию аутентификации по умолчанию.Тем не менее, я реализовал модальную замену формы входа по умолчанию.Я пытаюсь держать модальную форму входа открытой и отображать ошибки при неудачной попытке входа.Моя модальная форма входа выглядит следующим образом:

<!-- Modal HTML Markup -->
<div id="login-modal" class="modal fade">
 <div class="modal-dialog" role="document">
  <div class="modal-content">
   <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
    <h1 class="modal-title">Login</h1>
   </div>

    <div class="modal-body">
     <div class="cs-login-form">
      <form role="form" method="POST" action="{{ url('/login') }}">
       <div class="input-holder">
        {{ csrf_field() }}
        <div class="form-group">
         <label for="email" class="control-label">E-Mail Address</label>
          <div>
           <input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" autofocus>
          </div>
         </div>
        </div>
        <div class="input-holder">
         <div class="form-group">
          <label for="password" class="control-label">Password</label>
         <div>
         <input id="password" type="password" class="form-control" name="password">
         </div>
        </div>

       </div>


       <div class="form-group">
       <div>
        <div class="checkbox">
         <label>
          <input type="checkbox" name="remember"> Remember Me
         </label>
        </div>
       </div>
       </div>

       <div class="form-group">
        <div>
         <button type="submit" class="btn btn-primary">
          Login
         </button>
         <a class="btn btn-link" href="{{ url('/password/reset') }}">
          Forgot Your Password?
         </a>
        </div>
       </div>
      </form>
     </div>    
    </div>
   </div><!-- /.modal-content -->
  </div><!-- /.modal-dialog -->
 </div>

В настоящее время, когда пользователь вводит неверные учетные данные, модальное имя исчезает, и пользователь перенаправляется обратно на домашнюю страницу без ошибок.Мой контроллер входа не был изменен и выглядит так

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/

use AuthenticatesUsers;

/**
 * Where to redirect users after login.
 *
 * @var string
 */
protected $redirectTo = '/home';

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('guest')->except('logout');
}
}

Ответы [ 3 ]

0 голосов
/ 03 июня 2018

Вам необходимо настроить функцию вручную, как объясняет Документация Laravel .Вам также понадобится маршрут и запрос ajax для входа в систему.

Маршрут нестандартного входа:

Route::post('/login', 'LoginController@authenticate');

По вашему мнению, вам сначала нужно будет установить метатег с помощью токена csrf.чтобы защитить себя от атак:

<meta name="csrf-token" content="{{ csrf_token() }}">

Тогда в вашем Ajax вы можете сделать это:

$.ajax({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    type: 'POST',
    url: '/login',
    data: [email: '', password: ''],
    success: function(controllerResponse) {
        if (!controllerResponse) {
           // here show a hidden field inside your modal by setting his visibility 
        } else {
           // controller return was true so you can redirect or do whatever you wish to do here
        }
    }
});

Пользовательский метод контроллера может выглядеть примерно так:

public function authenticate(Request $request)
{
    $credentials = $request->only('email', 'password');

    if (Auth::attempt($credentials)) {
        // Authentication passed...
        return true;
    } else {
        return false;
    }
}

* Важное примечание : Обратите внимание, что я не полностью закодировал все, так как stackoverflow направлен на решение проблем, а не на кодирование для других, поэтому вам необходимо выяснить, как выбирать данные формы с помощью js, и создатьсообщение об ошибке и показать его, когда контроллер возвращает false.

Также контроллер является действительно базовым, вы можете улучшить его с помощью таких функций, как управление попытками max-login от определенного пользователя и т. д. *

0 голосов
/ 03 июня 2018

Вы можете использовать переменную сеанса $ _SESSION ['error'].И напишите условие if над формой входа в систему, например

if (isset ($ _ SESSION ['error']) echo "Ваше сообщение об ошибке.")

И простосбросить переменную сеанса сразу после этого

0 голосов
/ 03 июня 2018

вы можете отправить свои учетные данные с помощью ajax-вызова, затем в вашем методе успеха вы можете проверить, успешно он или нет, и показать ошибку, если не в порядке.Если все в порядке, вы можете скрыть модальное вручную и перенаправить пользователя на домашнюю страницу.

...