Cetera разрабатывает личные кабинеты. Также мы создали Cetera.Spaces — конструктор для быстрого развертывания и кастомизации личных кабинетов в интернете.
Помните, что для активации пользователя необходимо подтвердить действия через адрес электронной почты. Активация нужна только для тех людей, которые активно пользуются laravel.
Форма регистрации
Вначале создается форма для регистрации. Открываем директорию с шаблоном resources. Там создаем поддиректорию auth. В этой же папке создаем файл register.blade.php и прописываем код:
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="utf-8">
<metahttp-equiv="X-UA-Compatible" content="IE=edge">
<metaname="viewport" content="width=device-width, initial-scale=1">
<title>Регистрация</title>
<linkhref="{{ asset('/css/bootstrap.css') }}" rel="stylesheet">
<scriptsrc="{{ asset('/js/jquery.js') }}" type="text/javascript" charset="utf-8"></script>
<scriptsrc="{{asset('/js/bootstrap.js') }}"type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="container">
<nav class="navbar" role="navigation">
<ul class="navnavbar-nav">
<li class="active">
<a href="{{ url('auth/login') }}">Вход</a>
</li>;
</ul>
</nav>
{{--Ошибки--}}
@if ($errors->has())
<divclass="row">
<div class="col-md-8 col-md-offset-2">
<div class="alertalert-danger" role="alert">
<button class="close" aria-label="Close" data-dismiss="alert" type="button">
<spanaria-hidden="true">×</span>
</button>
<ul>
@foreach($errors->all() as $error)
<li> {{{ $error }}}</li>
@endforeach
</ul>
</div>
</div>
</div>
@endif
<formrole="form" method="post" action="{{ url('auth/register') }}">
{!! csrf_field() !!}
<div class="form-group">
<labelfor="email">Email</label>
<inputtype="email" class="form-control" id="email" placeholder="Email" name='email'>
</div>
<divclass="form-group">
<labelfor="password">Пароль</label>
<inputtype="password" class="form-control" id="password" placeholder=
«Пароль
» name="password">
</div>
<div class="form-group">
<labelfor="confirm_password">Повторите пароль</label>
<inputtype="password" class="form-control" id="confirm_password" placeholder=
«Повторите пароль
» name="password_confirmation">
</div>
<button type="submit" class="btn btn-default">Отправить</button>
</form>
</div>
</body>
</html>
Думаю, что с этим трудностей не возникнет.
Не нужно создавать контроллер, чтобы зарегистрироваться и авторизоваться. В программу встроен механизм, который отвечает за эти действия. Контроллер называется:
app/Http/Controllers/Auth/AuthController.php
Пользователю достаточно переопределить метод контроллера AuthController.php. Для того чтобы отобразить форму регистрации, используйте метод getRegister.
Переходим к роутеру. Открываем следующий файл:
app/Http/Controllers/routes.php
Определяем роутер по выбранному методу:
Route::get('auth/register', 'Auth\AuthController@getRegister');
Открываем в браузере приложение. У вас перед глазами сразу же предстанет форма для регистрации.
Личный кабинет Laravel
На этом этапе необходимо определить роут для регистрации пользователя. Переходим в следующий файл:
app/Http/Controllers/routes.php
Добавляем роут:
Route::post('auth/register', 'Auth\AuthController@postRegister');
Создаем таблицу для того, чтобы хранить всех пользователей. Миграцию для таблицы мы имеем, но она не подходит под требования. Ее придется изменить. Для этого переходим в следующий файл:
database/migrations/2014_10_12_create_users_table.php
И меняем код по схеме ниже:
<?php
useIlluminate\Database\Schema\Blueprint;
useIlluminate\Database\Migrations\Migration;
classCreateUsersTable
extendsMigration
{
/**
* Runthemigrations.
*
* @returnvoid
*/
publicfunctionup()
{
Schema::create('users', function (Blueprint $table) {
$table
→increments('id');
$table
→string('email')->unique();
$table
→string('password', 60);
$table
→boolean('activated')->default(0);
$table
→rememberToken();
$table
→timestamps();
});
}
/**
* Reversethemigrations.
*
* @returnvoid
*/
publicfunctiondown()
{
Schema::drop('users');
}
}
Далее создаем таблицу, в которой будут храниться кода для того, чтобы активизировать пользователей.
Делаем миграцию:
artisanmake:migrationcreate_codes_table --create=codes
И вставляем код, прописанный в схеме ниже:\
<?php
useIlluminate\Database\Schema\Blueprint;
useIlluminate\Database\Migrations\Migration;
classCreateCodesTableextendsMigration
{
/**
* Runthemigrations.
*
* @returnvoid
*/
publicfunctionup()
{
Schema::create('codes', function (Blueprint $table) {
$table
→increments('id');
$table
→tinyInteger('user_id')->unsigned();
$table
→string('code',10);
$table
→timestamps();
});
}
/**
* Reversethemigrations.
*
* @returnvoid
*/
publicfunctiondown()
{
Schema::drop('codes');
}
}
В этом коде также все понятно, поэтому объяснять ничего не требуется. Если вы нуждаетесь в изучении более подробной информации про миграцию, то ее можно найти в официальной документации.
Следующим действием будет создание модели для таблицы под названием «codes». Прописываем команду:
artisanmake:modelCode
Генерируем файл Code.php. Он должен выглядеть так:
<?php
namespaceApp;
useIlluminate\Database\Eloquent\Model;
classCodeextendsModel
{
//
}
Редактируем его. Должно получиться следующее:
<?php
namespaceApp;
useIlluminate\Database\Eloquent\Model;
classCodeextendsModel
{
protected $table = 'codes';
protected $fillable = ['user_id', 'code'];
}
Создаем контроллер CodeController и там прописываем метод генерации кода:
artisanmake:controllerCodeController --plain
Файл контроллера, который получилось сгенерировать, должен быть следующего содержания:
<?php
namespaceApp\Http\Controllers;
useIlluminate\Http\Request;
useApp\Http\Requests;
useApp\Http\Controllers\Controller;
classCodeControllerextendsController
{
//
}
Добавляем туда метод генерации кодов:
publicstaticfunctiongenerateCode($length = 10)
{
$num = range(0, 9);
$alf = range('a', 'z');
$_alf = range('A', 'Z');
$symbols = array_merge($num, $alf, $_alf);
shuffle($symbols);
$code_array = array_slice($symbols, 0, (int)$length);
$code = implode("", $code_array);
return $code;
}
Переходим к контроллеру с названием AuthController. Для начала изменим метод валидации:
protectedfunctionvalidator(array $data)
{
returnValidator::make($data, [
'email'
→ 'required|email|max:255|unique:users',
'password'
→ 'required|confirmed|min:6',
]);
}
Переходим к методу регистрации postRegister. Но нужно учесть, что тот, что определен в коробке, не подходит. Его необходимо переопределить. Откроем контроллер под названием AuthController и прописываем код на схеме:
publicfunctionpostRegister(Request $request)
{
$validator = $this->validator($request->all());
if ($validator
→fails()) {
throwValidationException($request, $validator);
};
$user = $this
→create($request->all());
//создаем код и записываем код
$code = CodeController::generateCode(8);
Code::create([
'user_id'
→ $user->id,
'code'
→ $code,
]);
//Генерируем ссылку и отправляем письмо на указанный адрес
$url = url('/').'/auth/activate?id='.$user->id.'&code='.$code;
Mail::send('emails.registration', array('url'
→ $url), function($message) use ($request)
{
$message
→to($request
→email)
→subject('Registration');
});
return 'Регистрация прошла успешно, на Ваш email отправлено письмо со ссылкой для активации аккаунта';
}
На этом этапе нужно не забыть вначале файла прописать:
useApp\Code;
useIlluminate\Support\Facades\Mail;
useApp\Http\Controllers\CodeController;
Таким образом, получился личный кабинет пользователя laravel.
Но мы не подключили ни одного сервиса, чтобы отправить сообщение на адрес электронной почты. Следовательно, при совершении этого действия будет выдаваться ошибка. Нужно настроить симуляцию отправки сообщения. На самом сообщении будет прописан лог. К тому же программа делается достаточно просто.
Открываем файл env
и изменяем его:
MAIL_DRIVER=log;
Создаем шаблон для писем с кодом. Создаем папку с названием emails, а внутри нее файл resources. В этой же папке создаем документ registration.blade.php с следующим текстом:
Для активации аккаунта перейдите по ссылке: {!! $url !!}
Теперь можно проверить, что вышло. Открываем страницу регистрации. Для начала необходимо проверить валидацию. Для этого вводим пароли, которые отличаются друг от друга.
Когда валидация сработала, регистрируем нового пользователя. После этого в логах проверяем сообщение. Если оно пришло, то вы все сделали правильно.