Статьи

Настройка аутентификации пользователя в Laravel с использованием Confide

Аутентификация пользователя является частью почти каждого веб-приложения. Хотя это часто встречается, более глубокий взгляд показывает, что это не так просто, как может показаться. Помните, что проверка, восстановление пароля и подтверждение по электронной почте жизненно важны для любой достойной формы аутентификации.

Confide — это решение для аутентификации для Laravel, созданное для сокращения повторяющихся действий, связанных с управлением пользователями. Это СУХОЙ подход к таким функциям, как создание учетной записи, вход в систему, выход из системы, подтверждение по электронной почте, сброс пароля и т. Д.

Начиная с ранних версий, Confide всегда пользовался популярностью среди разработчиков и широко представлен в проектах Laravel. Благодаря недавнему обновлению пакет теперь совместим с Laravel 4.2, который является последней стабильной версией Laravel на момент написания этой статьи.

В этом уроке мы начнем с самого начала, создав наше приложение Laravel с использованием Composer, а затем:

  • создать форму регистрации с полным набором правил проверки
  • форма входа в систему с опцией «забыл мой пароль», которая отправит пользователю ссылку для переопределения его пароля
  • используйте фильтры Laravel, чтобы разрешить только зарегистрированным пользователям доступ к определенному маршруту.

Прежде всего, давайте создадим приложение с помощью Composer.

1
$ composer create-project laravel/laravel myapp

Теперь, находясь внутри каталога проекта, отредактируйте ключ require файла composer.json и включите в него запись confide:

1
«require»: { «laravel/framework»: «~4.2», «zizaco/confide»: «~4.0@dev» },

Затем запустите обновление composer для нашей новой зависимости:

1
$ composer update zizaco/confide

В config/app.php нашего проекта добавьте 'Zizaco\Confide\ServiceProvider' в конец массива провайдеров:

1
… ‘providers’ => array( ‘Illuminate\Foundation\Providers\ArtisanServiceProvider’, ‘Illuminate\Auth\AuthServiceProvider’, … ‘Zizaco\Confide\ServiceProvider’, ), …

Также добавьте 'Confide' => 'Zizaco\Confide\Facade' в массив псевдонимов в том же файле:

1
… ‘aliases’ => array( ‘App’ => ‘Illuminate\Support\Facades\App’, ‘Artisan’ => ‘Illuminate\Support\Facades\Artisan’, … ‘Confide’ => ‘Zizaco\Confide\Facade’, ),

Установите address и name в config/mail.php . Этот конфиг будет использоваться для отправки пользователям электронных писем с подтверждением и сбросом пароля. В этом руководстве вы можете использовать свой личный SMTP-сервер, чтобы все заработало

Например, если вы используете Gmail, вы можете сделать следующее:

1
2
‘driver’ => ‘smtp’, ‘host’ => ‘smtp.gmail.com’, // For testing purposes
‘from’ => array( ‘address’ => ‘[email protected]’, ‘name’ => ‘MyApp’ ), … ‘username’ => ‘[email protected]’, ‘password’ => ‘<password>, …

Теперь создайте миграции Confide, выполнив:

1
$ php artisan confide:migration $ php artisan migrate

Это создаст таблицу, содержащую email , password , remember_token , confirmation_code и confirmed столбцы. Это поля по умолчанию, необходимые для Confide. Не стесняйтесь добавлять столбцы в таблицу позже.

Замените весь код в app/models/User.php на:

1
2
3
4
5
6
7
<?php
use Zizaco\Confide\ConfideUser;
use Zizaco\Confide\ConfideUserInterface;
 
class User extends Eloquent implements ConfideUserInterface {
    use ConfideUser;
}

Zizaco\Confide\ConfideUser позаботится о большинстве поведений пользовательской модели.

Confide содержит инструмент генератора, который создаст контроллер и напишет маршруты для нас. Чтобы создать UsersController и зарегистрировать маршруты, запустим следующие команды:

1
2
$ php artisan confide:controller
$ php artisan confide:routes

Поскольку новые классы созданы, нам нужно обновить файлы автозагрузки.

1
$ composer dump-autoload

Мы сделали! Наше приложение теперь имеет все функции, которые предлагает Confide. Запустите сервер приложений, вызвав php artisan serve в терминале.

В нашем приложении доступны следующие маршруты GET :

1
2
3
http://localhost:8000/users/create
http://localhost:8000/users/login
http://localhost:8000/users/forgot_password

Для доступа к текущему пользователю мы можем вызвать Confide::user() . Поэтому, чтобы показать имя текущего пользователя, нам нужно заменить содержимое app/views/hello.php на:

Теперь перейдите к http://localhost:8000/users/create чтобы создать нашего первого пользователя. Вы получите подтверждение по электронной почте сразу после отправки формы (если вы заполнили config/mail.php правильными значениями) . Войдите в систему, и вы увидите имя пользователя на экране.

Отображение имени пользователя на странице

Стандартные формы Confide совместимы с Bootstrap. Так что не пугайтесь их «безобразия» на странице без CSS. Отредактируйте контроллер, созданный Confide ( UserController.php ), и обновите метод create следующим образом:

1
2
3
4
5
<?php
 
public function create() {
    return View::make(‘users.signup’);
}

Таким образом, наше приложение будет отображать View users.signup . Давайте создадим это представление в app/views/users как signup.blade.php со следующим содержимым:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!doctype html>
<html lang=»en»>
    <head>
            <meta charset=»UTF-8″>
            <title>User auth with Confide</title>
            {{— Imports twitter bootstrap and set some styling —}}
            <link href=»//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css» rel=»stylesheet»>
        <style>
        body { background-color: #EEE;
        .maincontent {
            background-color: #FFF;
            margin: auto;
            padding: 20px;
            width: 300px;
            box-shadow: 0 0 20px #AAA;
        }
        </style>
    </head>
    <body>
        <div class=»maincontent»>
            <h1>Signup</h1>
            {{— Renders the signup form of Confide —}}
            {{ Confide::makeSignupForm()->render();
        </div>
    </body>
</html>

После этого у нас будет намного более элегантный результат в форме создания пользователя на http://localhost:8000/user/create :

Улучшенная форма регистрации

Вам не нужно использовать формы, сгенерированные Confide. Вы можете создать свое собственное представление, которое отправляет данные на маршруты POST .

Откройте app/routes.php и добавьте приведенный ниже код в app/routes.php файла:

1
2
3
4
5
// Dashboard route
Route::get(‘userpanel/dashboard’, function(){ return View::make(‘userpanel.dashboard’); });
 
// Applies auth filter to the routes within admin/
Route::when(‘userpanel/*’, ‘auth’);

Создайте файл представления app/views/userpanel/dashboard.blade.php :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!doctype html>
<html lang=»en»>
<head>
    <meta charset=»UTF-8″>
    <title>User auth with Confide</title>
    {{— Imports twitter bootstrap and set some styling —}}
    <link href=»//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css» rel=»stylesheet»>
    <style>
        body { background-color: #EEE;
        .maincontent {
            background-color: #FFF;
            margin: 30px auto;
            padding: 20px;
            width: 300px;
            box-shadow: 0 0 20px #AAA;
        }
    </style>
</head>
<body>
    <div class=»maincontent»>
        <h1>{{ Confide::user()->username }}</h1>
        <div class=»well»>
            <b>email:</b> {{ Confide::user()->email }}
        </div>
     </div>
</body>
</html>

Теперь, когда мы применили фильтр ко всем маршрутам внутри пользовательской userpanel . Нам понадобится небольшая настройка, чтобы фильтр auth перенаправлял пользователя на правильный URL-адрес входа. Отредактируйте app/filters.php в строке 46 , чтобы заменить return Redirect::guest('login'); с:

1
… return Redirect::guest(‘users/login’);

userpanel/dashboard страница пользовательской userpanel/dashboard будет доступна только пользователям, вошедшим в приложение. Фильтр перенаправит гостевых пользователей в форму входа и затем вернется на панель мониторинга после того, как они вошли в систему.

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

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

Можно сказать, что Confide — это СУХОЙ подход к аутентификации пользователей. Он предлагает удобство наличия готовых функциональных возможностей, но в то же время обеспечивает высокую настройку.

Проверьте Confide на GitHub . Если у вас возникли какие-либо проблемы при изучении этого руководства, свяжитесь со мной.