Laravel 5.2 нужен пример, который реализует драйверы аутентификации по умолчанию / «Multi-Auth». который требует много работ прямо сейчас, как

Драйверы аутентификации / «Multi-Auth»

как и до релиза laravel 5.2, указано, что multi auth поддерживается из коробки. но нет примеров кодов, показывающих, как проходить аутентификацию с использованием разных драйверов с маршрутами. Поэтому мне нужна помощь в настройке мульти-аутентификации с использованием laravel 5.2 по умолчанию.

4

Решение

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 :)
6

Другие решения

Используя пример 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';
});
1

Спасибо за ответ 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();
0

bartw2k9, чтобы решить по умолчанию Auth пользователь, проверить Настройка охраны на документах. Настройка protected $guard = 'admin'; собственность на AuthController сообщает Laravel, какую аутентификацию по умолчанию использовать. https://laravel.com/docs/master/authentication#authentication-quickstart

0
По вопросам рекламы [email protected]