13. Авторизация

Создадим три рута:

Route::get('/login', '[email protected]')->name('login.create');
Route::post('/login', '[email protected]')->name('login');
Route::get('/logout', '[email protected]')->name('logout');

Вью

Создадим вью resources/views/user/login.blade.php :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Регистрация</title>

    <!-- Google Font: Source Sans Pro -->
    <link rel="stylesheet"
          href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
    <link rel="stylesheet" href="{{ asset('assets/admin/admin.css') }}">
</head>
<body class="hold-transition register-page">
<div class="register-box">
    <div class="card card-outline card-primary">
        <div class="card-header text-center">
            <h1>Авторизация</h1>
        </div>

        @if (isset($error))
            <div class="alert alert-danger">
                {{ $error }}
            </div>
        @endif

        <div class="card-body">
            <form action="{{ route('login') }}" method="post">
                @csrf
                <div class="input-group mb-3">
                    <input type="email" name="email" value="{{ old('email') }}" class="form-control"
                           placeholder="Email">
                    <div class="input-group-append">
                        <div class="input-group-text">
                            <span class="fas fa-envelope"></span>
                        </div>
                    </div>
                </div>
                <div class="input-group mb-3">
                    <input type="password" name="password" class="form-control" placeholder="Password">
                    <div class="input-group-append">
                        <div class="input-group-text">
                            <span class="fas fa-lock"></span>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-6 offset-6">
                        <button type="submit" class="btn btn-primary btn-block">Авторизоваться</button>
                    </div>
                    <!-- /.col -->
                </div>
            </form>
        </div>
        <!-- /.form-box -->
    </div><!-- /.card -->
</div>
<!-- /.register-box -->

<script src="{{ asset('assets/admin/admin.js') }}"></script>
</body>
</html>

Controller

Добавим экшены в контроллер app/Http/Controllers/UserController.php :

public function loginForm() {
    return view('user.login');
}

public function login(Request $request) {
    $request->validate([
        'email' => 'required|email',
        'password' => 'required'
    ]);

    if (Auth::attempt([
        'email' => $request->email,
        'password' => $request->password,
    ])) {
        session()->flash('success', 'Вы авторизовались!');
        if (Auth::user()->is_admin) {
            return redirect()->route('admin.index');
        } else {
            return redirect()->route('home');
        }
    }

    return redirect()->back()->with('error', 'Не удалось авторизоваться!');
}

public function logout() {
    Auth::logout();
    return redirect()->route('login.create');
}

Middleware

Для запрета доступа в админку не админам создадим middleware:

php artisan make:middleware AdminMiddleware

Создался файл app/Http/Middleware/AdminMiddleware.php .

Изменим экшен handle :

public function handle(Request $request, Closure $next)
{
    if (Auth::check() && Auth::user()->is_admin) {
        return $next($request);
    }
    abort(404);
}

Зарегистрируем наш посредник в app/Http/Kernel.php . В свойство $routeMiddleware добавим:

'admin' => \App\Http\Middleware\AdminMiddleware::class,

И добавим фильтрацию в наши руты:

Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => 'admin'], function ()

Теперь не админы не смогут видеть нашу админку.

Также добавим еще два посредника в руты:

Route::group(['middleware' => 'guest'], function () {
    Route::get('/register', '[email protected]')->name('register.create');
    Route::post('/register', '[email protected]')->name('register.store');
    Route::get('/login', '[email protected]')->name('login.create');
    Route::post('/login', '[email protected]')->name('login');
});

Route::get('/logout', '[email protected]')->name('logout')->middleware('auth');

Эти middleware созданы в приложении автоматически.

Поменяем редирект в app/Http/Middleware/RedirectIfAuthenticated.php в экшене handle:

return redirect()->route('home');

Либо поменяем константу HOME на ‘/’ в app/Providers/RouteServiceProvider.php .

 

 

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x