Аутентификация пользователя является частью почти каждого веб-приложения. Хотя это часто встречается, более глубокий взгляд показывает, что это не так просто, как может показаться. Помните, что проверка, восстановление пароля и подтверждение по электронной почте жизненно важны для любой достойной формы аутентификации.
Confide — это решение для аутентификации для Laravel, созданное для сокращения повторяющихся действий, связанных с управлением пользователями. Это СУХОЙ подход к таким функциям, как создание учетной записи, вход в систему, выход из системы, подтверждение по электронной почте, сброс пароля и т. Д.
Начиная с ранних версий, Confide всегда пользовался популярностью среди разработчиков и широко представлен в проектах Laravel. Благодаря недавнему обновлению пакет теперь совместим с Laravel 4.2, который является последней стабильной версией Laravel на момент написания этой статьи.
Что мы будем делать
В этом уроке мы начнем с самого начала, создав наше приложение Laravel с использованием Composer, а затем:
- создать форму регистрации с полным набором правил проверки
- форма входа в систему с опцией «забыл мой пароль», которая отправит пользователю ссылку для переопределения его пароля
- используйте фильтры Laravel, чтобы разрешить только зарегистрированным пользователям доступ к определенному маршруту.
Создание приложения
Прежде всего, давайте создадим приложение с помощью Composer.
1
|
$ composer create-project laravel/laravel myapp
|
Установка Confide
Теперь, находясь внутри каталога проекта, отредактируйте ключ 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
позаботится о большинстве поведений пользовательской модели.
UsersController и маршруты
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
на:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>User auth with Confide</title> </head> <body> <h1>Hello Confide</h1> <p> Hi <?php echo (Confide::user() ?: 'visitor') ?> </p> </body> </html>
Теперь перейдите к 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 . Если у вас возникли какие-либо проблемы при изучении этого руководства, свяжитесь со мной.