Драйверы аутентификации / «Multi-Auth»
как и до релиза laravel 5.2, указано, что multi auth поддерживается из коробки. но нет примеров кодов, показывающих, как проходить аутентификацию с использованием разных драйверов с маршрутами. Поэтому мне нужна помощь в настройке мульти-аутентификации с использованием laravel 5.2 по умолчанию.
Set two new model
App\Admin
App\User
Update config/auth.php
return [
'defaults' => [
'guard' => 'user',
'passwords' => 'user',
],
'guards' => [
'user' => [
'driver' => 'session',
'provider' => 'user',
],
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
],
'providers' => [
'user' => [
'driver' => 'eloquent',
'model' => 'App\User',
],
'admin' => [
'driver' => 'eloquent',
'model' => 'App\Admin',
],
],
'passwords' => [
'user' => [
'provider' => 'user',
'email' => 'auth.emails.password',
'table' => 'password_resets',
'expire' => 60,
],
'admin' => [
'provider' => 'admin',
'email' => 'auth.emails.password',
'table' => 'password_resets',
'expire' => 60,
]
]
];
In kernel.php
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
//\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
],
];
and in Route.php set below code and test
Route::get('/login', function() {
$auth = auth()->guard('admin');
$credentials = [
'email' => '[email protected]',
'password' => 'password',
];
if ($auth->attempt($credentials)) {
return redirect('/profile');
}
});
Route::get('/profile', function() {
if(auth()->guard('admin')->check()){
print_r(auth()->guard('admin')->user()->toArray());
}
if(auth()->guard('user')->check()){
print_r(auth()->guard('user')->user()->toArray());
}
});
Enjoy :)
Используя пример rajpurohit-dinesh, нам просто нужно закончить первый шаг:
1:
Создайте модель App \ Admin (в нашей папке приложений). Вот как должен быть ваш класс Authenticatable.
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
Class Admin extends Authenticatable
{
//
}
2: Обновить config / auth.php.
return [
// This is the default guard used, not need to declare
// another guard here
'defaults' => [
'guard' => 'user',
'passwords' => 'user',
],
// Here we must to declare the guards, if we created the App\Admin
// class as first step, we don't need to create a custom guard
'guards' => [
'user' => [
'driver' => 'session',
'provider' => 'user',
],
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
],
// In this example we are using only 'eloquent' driver
'providers' => [
'user' => [
'driver' => 'eloquent',
'model' => 'App\User',
],
'admin' => [
'driver' => 'eloquent',
'model' => 'App\Admin',
],
],
'passwords' => [
'user' => [
'provider' => 'user',
'email' => 'auth.emails.password',
'table' => 'password_resets',
'expire' => 60,
],
'admin' => [
'provider' => 'admin',
'email' => 'auth.emails.password',
'table' => 'password_resets',
'expire' => 60,
]
]
];
3: Чтобы проверить это, мы можем использовать наш файл app \ Http \ Route.php:
Route::get('/login', function() {
$auth = auth()->guard('admin');
$credentials = [
'email' => '[email protected]',
'password' => 'password',
];
if ($auth->attempt($credentials)) {
return 'Success';
} else {
return 'Not Success';
});
Спасибо за ответ HoLiC, он работает прямо сейчас, но можете ли вы попытаться реализовать его с помощью классов, которые Laravel принесет на старте? Вам просто нужно добавить маршруты:
Route::controller('/auth', 'Auth\AuthController');
Route::controller('/password', 'Auth\PasswordController');
и создайте форму в ресурсах / views / auth / login.blade.php из моего поста выше. После этого вы можете использовать маршруты laravel.dev/auth/login и laravel.dev/auth/logout
Механизм аутентификации стартера не работает должным образом и не совместим с мульти аутентификацией. Если вы проверите, вы можете войти через laravel.dev/auth/login, но только с пользователем (нет никакого способа настроить в AuthController или где-либо еще использовать администраторов) и действие выхода из системы не работает. Если вы проверите эту черту Illuminate \ Foundation \ Auth \ AuthenticatesUsers, то увидите, что этот механизм сейчас бесполезен, например, метод выхода из системы нигде не определяет администратора провайдера:
Auth::logout(); // not working logout should be smth like Auth::guard($provider)->logout();
bartw2k9, чтобы решить по умолчанию Auth пользователь, проверить Настройка охраны на документах. Настройка protected $guard = 'admin';
собственность на AuthController
сообщает Laravel, какую аутентификацию по умолчанию использовать. https://laravel.com/docs/master/authentication#authentication-quickstart