Авторизация и регистрация на laravel 5.8

03.11.2019

Как сделать регистрацию и авторизацию пользователей в laravel 5.8.

Также ограничение регистрации и авторизация по логину вместо емейла.

"Баг" 403 при обращении к /admin

на самом деле все просто - на сервере в директории public не должно быть папокок и/или файлов с именами роутов прописанных в /routes/web.php

Первоначальная настройка:

Для начала выполняем в консоли:

 
php artisan make:auth
php artisan migrate

Это автоматически добавит необходимый функционал и даже соответствующие ссылки в базовый шаблон (/register и /login).

Если, как и мне, Вам не нужна регистрация, то на данном этапе можно зарегистрировать себе пользователя, что бы не пришлось делать это руками.

Запрет регистрации (оставляем только авторизацию):

Автоматически в файл с маршрутами /routes/web.php, добавляется

 
Auth::routes();

Этот метод содержит код:

 
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');

// Password Reset Routes...
$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm');
$this->post('password/reset', 'Auth\ResetPasswordController@reset');

Нам из него нужно только:

 
// Authentication Routes...
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');

стоит обратить внимание замену $this-> на Route::

Доступ к административному разделу только для авторизованных пользователей.

Создаем middleware через консоль:

 
php artisan make:middleware AdminMiddleware

После нам нужно будет дописать класс контроллера /app/Http/Middleware/AdminMiddleware.php

 
use Auth;

и

 
    public function handle($request, Closure $next)
    {
        if(Auth::check())
        {
          return $next($request);
        }
        
        abort(404);
        
    }

Включаем наш middleware в /app/Http/Kernel.php, добавив:

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

Прописываем в /routes/web.php какие маршруты должны проверяться в нашем middleware:

 
Route::group([
    'middleware' => 'admin'
], function (){
    Route::get('/admin', 'Admin\DashboardController@index');
    Route::resource('/admin/posts', 'Admin\PostsController');
});

Авторизация по имени, а не по Email

Меня не устроило, что по умолчанию пользователь, при авторизации, должен указать емейл ,а не login

Нужно в /app/Http/Controllers/Auth/LoginController.php, добавить метод:

 
    public function username()
    {
        return 'name';
    }

И изменить саму форму /resources/views/auth/login.blade.php:

Блок с именем нужно заменить на:

 
    <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>

    <div class="col-md-6">
        <input id="name" type="name" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>

        @error('name')
            <span class="invalid-feedback" role="alert">
                <strong>{{ $message }}</strong>
            </span>
        @enderror
    </div>


Категории: Laravel
Яндекс.Метрика