рд▓рд╛рд░рд╡реЗрд▓ рдФрд░ рд╕рдВрддрд░реА рдкрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдХреЗ рд▓рд┐рдП рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд▓реЙрдЧрд┐рди рдлрд╝реЙрд░реНрдо

рд╕рд╛рдЗрдЯреЗрдВ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рджреЗрдирд╛ рд╣реЛрдЧрд╛ред рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рддрдХ рд╕рд░рд▓, рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд░реВрдк рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреБрд╕реНрдЦрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд▓реЗрдЦ рдореЗрдВ рд▓рд╛рд░рд╡реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рддрдХрдиреАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрдм рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕ рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ Ubuntu 12.04, PostgreSQL 9.3, Nginx 1.1.19, PHP 5.5.7, рд╕рдВрдЧреАрддрдХрд╛рд░ рдФрд░ рд▓рд╛рд░рд╡реЗрд▓ 4.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рдПрдХ рддрд╛рдЬрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред PostgreSQL рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдХрддрд╛рдИ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рдкрд╛рд╕рд╡рд░реНрдб рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред Nginx рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрдм рдкрддрд╛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп examples.loc example.loc рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реНрдЯрдм рдореБрдЦреНрдп рдкреГрд╖реНрда рдЦреБрд▓рддрд╛ рд╣реИ, рдЬреЛ рд▓рд╛рд░рд╡реЗрд▓ рдХреЗ рдмрдВрдбрд▓ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд┐рд▓рд╛рд▓реЗрдЦ "рдЖрдк рдЖ рдЧрдП рд╣реИрдВред"

рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рднреА рдкрде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рджрд░реНрд╢рд╛рдП рдЧрдП рд╣реИрдВред

рдкрд░реНрдпрд╛рд╡рд░рдг


рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рд▓рд╛рд░рд╡реЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА app/config/local рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдореЗрдВ database.php рдлрд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:
 <?php /** * app/config/local/database.php */ return array( 'default' => 'pgsql', 'connections' => array( 'pgsql' => array( 'driver' => 'pgsql', 'host' => 'localhost', 'database' => 'examples', 'username' => 'examples', 'password' => 'examples', 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', ), ), ); 

рдореИрдВ рд▓рд╛рд░рд╡реЗрд▓ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ local рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк / start.php рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рд▓рд╛рдЗрди рдХреЛ 'your-machine-name' рдХреЛ '*' рдмрджрд▓реЗрдВ:
 //   bootstrap/start.php $env = $app->detectEnvironment(array( 'local' => array('*'), )); 


рд╕рдВрддрд░реА рдХрдиреЗрдХреНрд╢рди


рд╕рдВрддрд░реА рдХрдиреЗрдХреНрд╢рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реВрдВред
рдореИрдВ "cartalyst/sentry": "2.0.*" рд▓рд╛рдЗрди "cartalyst/sentry": "2.0.*" require рдмреНрд▓реЙрдХ рдореЗрдВ "cartalyst/sentry": "2.0.*" ред
 //  composer.json { "name": "laravel/laravel", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "require": { "laravel/framework": "4.1.*", "cartalyst/sentry": "2.0.*" }, ... 

рдореИрдВ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:
$ composer update
$ рд╡рд░реНрдг рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
$ рдкреНрд░рддреАрдХ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ composer update рдЯрд╛рдЗрдк composer update

рдлрд╝рд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди / config / app.php рдореЗрдВ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
'Cartalyst\Sentry\SentryServiceProvider',

рдПрдкреНрд▓рд┐рдХреЗрд╢рди / config / app.php рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
'Sentry' => 'Cartalyst\Sentry\Facades\Laravel\Sentry',

рд╕рдВрддрд░реА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛:
$ php artisan migrate --package=cartalyst/sentry

рдореИрдВ рд╕рдВрддрд░реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:
$ php artisan config:publish cartalyst/sentry

рд╕рдВрдкрд╛рджрди app/config/packages/cartalyst/sentry/config.php рд▓рд┐рдП рдЦреЛрд▓реЗрдВред рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ 'login_attribute' => 'email' рдФрд░ рдЗрд╕реЗ 'login_attribute' => 'username' , рддрд╛рдХрд┐ рд╕рдВрддрд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕рдХреЗ рд▓реЙрдЧрд┐рди рд╕реЗ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░реЗрдЧрд╛, рди рдХрд┐ рдИ-рдореЗрд▓ рд╕реЗред

рд╕рдВрддрд░реА рдкрд▓рд╛рдпрди рдХрд░рддреЗ рд╕рдордп, рдПрдХ users рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдИ рдЧрдИ рдереА рдЬрд┐рд╕рдореЗрдВ рдПрдХ email рдлрд╝реАрд▓реНрдб рд╣реИ рд▓реЗрдХрд┐рди рдХреЛрдИ username рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рдВрддрд░реА рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд▓рд╛рдкрддрд╛ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрдирд╛рдПрдВ:
$ php artisan migrate:make alter_users_add_username

app/database/migration рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ, рдПрдХ рдлрд╝рд╛рдЗрд▓ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рддрд┐рдерд┐ рдФрд░ рд╕рдордп рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ alter_users_add_username.php ред alter_users_add_username.php рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:
 <?php /** * app/database/migration/0000_00_00_000000_alter_users_add_username.php */ use Illuminate\Database\Migrations\Migration; class AlterUsersAddUsername extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('users', function($table) { $table->string('username'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('users', function($table) { $table->dropColumn('username'); }); } } 

рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реВрдВ:
$ php artisan migrate

рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ:
$ php artisan migrate:rollback

рдореИрдВ рдПрдХ рдФрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрдирд╛рддрд╛ рд╣реВрдВ, рдЬреЛ users рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рд╕реБрдкрд░рдпреВрдЬрд╝рд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:
$ php artisan migrate:make add_user_admin

рдореИрдВ app/database/migrate рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдРрд╕реА рдлрд╝рд╛рдЗрд▓ add_user_admin.php рдЬреЛ add_user_admin.php рд╕рд╛рде рд╕рдорд╛рдкреНрдд add_user_admin.php рдФрд░ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИ:
 <?php /** * app/database/migration/0000_00_00_000001_add_user_admin.php */ use Illuminate\Database\Migrations\Migration; class AddUserAdmin extends Migration { /** * Run the migrations. * * @return void */ public function up() { $user = Sentry::createUser(array( 'username' => 'admin', 'email' => 'admin@examples.loc', 'password' => 'password', 'activated' => 1, 'permissions' => array( 'superuser' => 1, ), )); } /** * Reverse the migrations. * * @return void */ public function down() { User::where('username', '=', 'admin')->firstOrFail()->delete(); } } 

рдореИрдВ рдЬрд╛рдВрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреИрд╕реЗ рд░реЛрд▓ рдФрд░ рд░реЛрд▓ рдмреИрдХ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдореИрдВ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдиреЗ рдХреА рдУрд░ рдореБрдбрд╝рддрд╛ рд╣реВрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред

рд▓реЙрдЧ рдЗрди рдлреЙрд░реНрдо


app/controllers рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, app/controllers AuthController.php рдлрд╝рд╛рдЗрд▓ AuthController.php :
 <?php /** * app/controllers/AuthController.php */ class AuthController extends BaseController { /** *    * * @return Illuminate\View\View */ public function getLogin() { $title = ''; return View::make('auth.login', compact('title')); } } 

getLogin() рд╡рд┐рдзрд┐ $title рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреГрд╖реНрда рд╢реАрд░реНрд╖рдХ рдХреЛ getLogin() рдкрд╛рд╕ рджреЗрддреА рд╣реИ, рдЬреЛ рдПрдбрдорд┐рди рд▓реЙрдЧрд┐рди рдкреЗрдЬ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рдПрдХ рджреЗрдЦреЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, app/views рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ login.blade.php рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ login.blade.php рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
 /** * app/views/auth/login.blade.php */ @extends('layout') @section('main') <div class="container"> {{ Form::open(array('class' => 'form-signin')) }} @if (!$errors->isEmpty()) <div class="alert alert-danger"> @foreach ($errors->all() as $error) <p>{{ $error }}</p> @endforeach </div> @endif <h2 class="form-signin-heading">{{ $title }}</h2> {{ Form::text('username', null, array('class' => 'form-control', 'placeholder' => '')) }} {{ Form::password('password', array('class' => 'form-control', 'placeholde' => '')) }} <label class="checkbox"> {{ Form::checkbox('remember-me', 1) }}   </label> {{ Form::submit('', array('class' => 'btn btn-lg btn-primary btn-block')) }} {{ Form::close() }} </div> @stop 

login.blade.php рдЯреЗрдореНрдкреНрд▓реЗрдЯ login.blade.php . login.blade.php рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ app/views рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдмрдирд╛рддрд╛ рд╣реВрдВ:
 /** * app/views/layout.blade.php */ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>{{ $title }}</title> @section('styles') {{ HTML::style('//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css') }} {{ HTML::style(URL::asset('styles/base.css')) }} @show </head> <body> @yield('main') @section('scripts') {{ HTML::script('//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js') }} @show <body> </html> 

рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рдФрд░ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд░реВрдЯрд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкрддреЗ рдкрд░ рднреЗрдЬреЗ рдЧрдП рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд╕рдХреЗрдВ examples.loc/login getLogin() examples.loc/login , getLogin() рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЧрдП рдереЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, app/routes.php рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
 //  app/routes.php ... Route::group(array('before' => 'guest'), function () { Route::get('login', array( 'as' => 'auth.login', 'uses' => 'AuthController@getLogin' )); }); 

Route::get() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП Route::get() рдПрдХ рдорд╛рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ Route::get() , рдЬрд┐рд╕реЗ getLogin() рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ getLogin() AuthController рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ getLogin() /login рд╡рд┐рдзрд┐ рдХреЛ GET рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИред
рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд╕рдореВрд╣ рдореЗрдВ рднреА Cort.login auth.login рд░рдЦрд╛ред рдЗрд╕ рд╕рдореВрд╣ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рд╕реА рднреА рдорд╛рд░реНрдЧ рд╕реЗ рдкрд╣рд▓реЗ, guest рдлрд╝рд┐рд▓реНрдЯрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкрддреЗ /login рдкрд░ GET рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗрд╡рд▓ рддрднреА рд╣реЛрдЧрд╛ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрддрд┐рдерд┐ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЕрдзрд┐рдХреГрдд рдирд╣реАрдВ рд╣реИред

рдореИрдВ guest рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛ рддрд╛рдХрд┐ рд╡рд╣ рд╕рдВрддрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, app/filters.php рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, app/filters.php guest рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛрдб рдмрджрд▓ рджреВрдВрдЧрд╛:
 //  app/filters.php ... Route::filter('guest', function() { if (Sentry::check()) return Redirect::to('/'); }); ... 

рдЕрдм рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░ рдЬрд╛рдПрдВ examples.loc/login examples.loc/login рдФрд░ ...

рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ Call to undefined method Illuminate\Cookie\CookieJar::get() ред

рдПрдХ рд╣рд▓реНрдХреЗ Google рдЖрдВрджреЛрд▓рди рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕реЗрдВрдЯреНрд░реА 2.0 рд▓рд╛рд░рд╡реЗрд▓ 4.0 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ, рд▓реЗрдХрд┐рди 4.1 рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рд╕рдВрддрд░реА 2.1 рдкрд╣рд▓реЗ рд╣реА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рддреНрд░реБрдЯрд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ composer.json рдореЗрдВ рд╕рдВрддрд░реА рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ 2.1 рдореЗрдВ рдмрджрд▓рд╛:
 //  composer.json { "name": "laravel/laravel", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "require": { "laravel/framework": "4.1.*", "cartalyst/sentry": "2.1.*" }, ... 

рдореИрдВ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:
$ composer update

рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ examples.loc/login examples.loc/login рдФрд░ рдореИрдВ рд▓реЙрдЧрд┐рди рдлрд╝реЙрд░реНрдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджреЗрдЦрддрд╛ рд╣реВрдВред рдлрд╝реЙрд░реНрдо рдХреЛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ CSS рдЬреЛрдбрд╝рдиреЗ рд╣реЛрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, public рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, styles рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдФрд░ base.css рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:
 /** * public/style/base.css */ body { padding-top: 40px; padding-bottom: 40px; background-color: #eee; } .form-signin { max-width: 330px; padding: 15px; margin: 0 auto; } .form-signin .form-signin-heading, .form-signin .checkbox { margin-bottom: 10px; } .form-signin .form-signin-heading { text-align: center; } .form-signin .checkbox { font-weight: normal; } .form-signin .form-control { position: relative; font-size: 16px; height: auto; padding: 10px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .form-signin .form-control:focus { z-index: 2; } .form-signin input[type="text"] { margin-bottom: -1px; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .form-signin input[type="password"] { margin-bottom: 10px; border-top-left-radius: 0; border-top-right-radius: 0; } 


рдирд┐рдпрдВрддреНрд░рдХреЛрдВ


рдЕрдм рдлреЙрд░реНрдо рдХреЛ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк "рд▓реЙрдЧрд┐рди" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддреНрд░реБрдЯрд┐ 404 рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ /login рдкрддреЗ рдкрд░ рднреЗрдЬреЗ рдЧрдП AuthController рдХреЛ POST рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
 <?php /** * app/controllers/AuthController.php */ class AuthController extends BaseController { /** *    * * @return Illuminate\View\View */ public function getLogin() { $title = ''; return View::make('auth.login', compact('title')); } /** *      * * @return Illuminate\Http\RedirectResponse */ public function postLogin() { Input::flash(); try { $credentials = array( 'username' => Input::get('username'), 'password' => Input::get('password') ); $user = Sentry::authenticate($credentials, Input::get('remember-me')); } catch (Exception $e) { return Redirect::to(route('auth.login')) ->withErrors(array($e->getMessage())); } return Redirect::intended(route('admin')); } /** *   * * @return Illuminate\Http\RedirectResponse */ public function getLogout() { Sentry::logout(); return Redirect::route('auth.login'); } } 

postLogin() рд╡рд┐рдзрд┐ рдореЗрдВ, рдлреЙрд░реНрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрдорд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ Input::flash() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рддреНрд░ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред try рдмреНрд▓реЙрдХ рдореЗрдВ, рд╕рдВрддрд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдЗрдирдкреБрдЯ рдлреЙрд░реНрдо рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "рдпрд╛рдж рд░рдЦреЗрдВ" рдЪреЗрдХрдмреЙрдХреНрд╕ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ Sentry::authenticate() рдореЗрдВ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ Sentry::authenticate() true рд╣реЛрдЧрд╛ рдФрд░ рд╕рдВрддрд░реА рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдЧрд╛ред рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖ, рддреЛ catch рдореЗрдВ Redirect::to() рдкрджреНрдзрддрд┐ рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдЗрдирдкреБрдЯ рдкреЗрдЬ рдкрд░ рднреЗрдЬ рджреЗрдЧреАред рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, Redirect::intended() рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕ рдкреЗрдЬ рдкрд░ рднреЗрдЬ рджреЗрдЧреА рдЬрд┐рд╕реЗ рдЙрд╕рдиреЗ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдЗрдирдкреБрдЯ рдлреЙрд░реНрдо рдореЗрдВ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд┐рдпрд╛ рдерд╛ред рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ рдкреГрд╖реНрда рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкрддрд╛ /admin рдкрд░ рдПрдХ рдкреГрд╖реНрда рдЦреБрд▓ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдирд╛рдо admin рд╕рд╛рде рдПрдХ рдорд╛рд░реНрдЧ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред

getLogin() рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреГрд╖реНрда рдкрд░ рдкреБрдирдГ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд░реВрдЯрд┐рдВрдЧ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ /admin рдХреЛ рднреЗрдЬреЗ рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ app/controllers/HomeController.php рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
 <?php /** * app/controllers/HomeController.php */ class HomeController extends BaseController { public function showWelcome() { return View::make('hello'); } public function getAdmin() { return link_to(route('auth.logout'), ''); } } 

getAdmin() рд╡рд┐рдзрд┐ рдмрд╕ рдкреГрд╖реНрда рдкрд░ "рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ" рд▓рд┐рдВрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░реЗрдЧрд╛ред

рдорд╛рд░реНрдЧ


рдЕрдм, рддрд╛рдХрд┐ рдирдП рддрд░реАрдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХреЗрдВ, рдореИрдВ рдЗрд╕реЗ app/routes.php рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд app/routes.php
 /** * app/routes.php */ Route::get('/', function() { return View::make('hello'); }); Route::group(array('before' => 'guest'), function () { Route::get('login', array( 'as' => 'auth.login', 'uses' => 'AuthController@getLogin' )); Route::post('login', array( 'before' => 'csrf', 'uses' => 'AuthController@postLogin' )); }); Route::group(array('before' => 'auth'), function () { Route::get('admin', array( 'as' => 'admin', 'uses' => 'HomeController@getAdmin', )); Route::get('logout', array( 'as' => 'auth.logout', 'uses' => 'AuthController@getLogout' )); }); 

рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдореВрд╣, рдЬрд┐рд╕рдХреЗ рдкрд╣рд▓реЗ guest рдлрд╝рд┐рд▓реНрдЯрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдореЗрдВ GET рдФрд░ POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП /login рдкрддреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИред guest рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореЗрд╣рдорд╛рдиреЛрдВ рд╕реЗ рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз /login рдкрддреЗ рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рдд рдЕрдирдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ред

рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рджреВрд╕рд░рд╛ рд╕рдореВрд╣, рдЬрд┐рд╕рдХреЗ рдкрд╣рд▓реЗ auth рдлрд╝рд┐рд▓реНрдЯрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореЗрдВ рдкрддреЛрдВ /admin рдФрд░ /logout рд▓рд┐рдП рдорд╛рд░реНрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред auth рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрди рдкрддреЗ рдкрд░ рдХреЗрд╡рд▓ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрддреЗ рд╣реА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдпрд╣ рднреА рдХрд┐ рдпрд╣ рд╕рдВрддрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдлрд┐рд▓реНрдЯрд░ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, app/filters.php рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ app/filters.php рдирд┐рдореНрди рдХреЗ рд░реВрдк рдореЗрдВ auth рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдмрджрд▓реЗрдВ:
 //  app/filters.php ... Route::filter('auth', function() { if (!Sentry::check()) return Redirect::guest(route('auth.login')); }); ... 


рдЕрдм рдЖрдк рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЕрдирдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ /admin рдкреГрд╖реНрда рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдкрд╛рдПрдЧрд╛, рдпрд╣ рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдмрд╛рдж рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдмрд╛рдж, /login рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд▓рд╛рд░рд╡реЗрд▓ рдХреЗ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ


getcomposer.org/doc/00-intro.md#installation-nix
laravel.com/docs/installation#install-laravel
cartalyst.com/manual/sentry/installation/laravel-4

рдпреБрдкреАрдбреА
Github.com/bskton/examples/tree/eform рдирдореВрдирд╛ рдХреЛрдб

Source: https://habr.com/ru/post/In206908/


All Articles