Может ли кто-нибудь объяснить Laravel 5.2 Multi Auth с примером
что я сделал до сих пор.
Я пытаюсь аутентифицировать пользователи и admin форма user
таблица и admin
таблицы соответственно.
Я использую User
модель, предоставленная laravel из коробки и созданная точно так же для Admin
.
Я добавил ключ охраны и ключ поставщика в auth.php
гвардии
'guards' => [
'user' =>[
'driver' => 'session',
'provider' => 'user',
],
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
],
поставщики
'providers' => [
'user' => [
'driver' => 'eloquent',
'model' => AppUser::class,
],
'admin' => [
'driver' => 'eloquent',
'model' => AppAdmin::class,
]
],
маршруты
Route::group(['middleware' => ['web']], function () {
//Login Routes...
Route::get('/admin/login','AdminAuthAuthController@showLoginForm');
Route::post('/admin/login','AdminAuthAuthController@login');
Route::get('/admin/logout','AdminAuthAuthController@logout');
// Registration Routes...
Route::get('admin/register', 'AdminAuthAuthController@showRegistrationForm');
Route::post('admin/register', 'AdminAuthAuthController@register');
Route::get('/admin', 'AdminController@index');
});
Я создал каталог с именем AuthAdmin
где Laravel по умолчанию AuthController.php
и PasswordController.php
файлы присутствуют. (Пространство имен изменено соответствующим образом)
в первую очередь в документы, что Laravel отметил, что, как, чтобы указать пользовательские охраны при проверке подлинности такой, который не работает.
есть еще один метод, упомянутый в документах laravel, чтобы использовать защиту, которая не является тоже работает.
было бы очень полезно, если бы кто-то мог решить проблемы и исправить меня, если я ошибаюсь.
3 ответа:
после Большого копания и множества вопросов и ответов мне наконец удалось работать Laravel 5.2 Multi Auth с двумя таблицами, поэтому я пишу ответ на свой собственный вопрос.
как реализовать Multi Auth в Larvel 5.2
как уже упоминалось выше. Два стола
admin
иusers
Laravel 5.2 имеет новый .
php artisan make:auth
он будет генерировать основной вход/регистрация
route
,view
иcontroller
наuser
таблица.сделать
admin
таблицыusers
таблица для простоты.Контроллер Для Администратора
app/Http/Controllers/AdminAuth/AuthController
app/Http/Controllers/AdminAuth/PasswordController
(примечание: Я только что скопировал эти файлы изapp/Http/Controllers/Auth/AuthController
здесь)
config/auth.php
//Authenticating guards 'guards' => [ 'user' =>[ 'driver' => 'session', 'provider' => 'user', ], 'admin' => [ 'driver' => 'session', 'provider' => 'admin', ], ], //User Providers 'providers' => [ 'user' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admin' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ] ], //Resetting Password 'passwords' => [ 'clients' => [ 'provider' => 'client', 'email' => 'auth.emails.password', 'table' => 'password_resets', 'expire' => 60, ], 'admins' => [ 'provider' => 'admin', 'email' => 'auth.emails.password', 'table' => 'password_resets', 'expire' => 60, ], ],
route.php
Route::group(['middleware' => ['web']], function () { //Login Routes... Route::get('/admin/login','AdminAuth\AuthController@showLoginForm'); Route::post('/admin/login','AdminAuth\AuthController@login'); Route::get('/admin/logout','AdminAuth\AuthController@logout'); // Registration Routes... Route::get('admin/register', 'AdminAuth\AuthController@showRegistrationForm'); Route::post('admin/register', 'AdminAuth\AuthController@register'); Route::get('/admin', 'AdminController@index'); });
AdminAuth/AuthController.php
добавить два метода и указать
$redirectTo
и$guard
protected $redirectTo = '/admin'; protected $guard = 'admin'; public function showLoginForm() { if (view()->exists('auth.authenticate')) { return view('auth.authenticate'); } return view('admin.auth.login'); } public function showRegistrationForm() { return view('admin.auth.register'); }
это поможет вам открыть другую форму входа для администратора
создание промежуточного программного обеспечения для
admin
class RedirectIfNotAdmin { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param string|null $guard * @return mixed */ public function handle($request, Closure $next, $guard = 'admin') { if (!Auth::guard($guard)->check()) { return redirect('/'); } return $next($request); }
}
Регистрация middleware в
kernel.php
protected $routeMiddleware = [ 'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class, ];
используйте это промежуточное программное обеспечение в
AdminController
например,namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; class AdminController extends Controller { public function __construct(){ $this->middleware('admin'); } public function index(){ return view('admin.dashboard'); } }
это все, что нужно, чтобы заставить его работать, а также получить json аутентифицированного использования администратора
Auth::guard('admin')->user()
Edit-1
Мы можем получить доступ к аутентифицированному пользователю напрямую с помощьюAuth::user()
но если у вас есть две таблицы аутентификации, то вы должны использоватьAuth::guard('guard_name')->user()
для выхода из системы
Auth::guard('guard_name')->user()->logout()
для аутентифицированного пользователя json
Auth::guard('guard_name')->user()
Edit 2
теперь вы можете скачать Laravel 5.2 Multiauth реализованный проект http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/
в случае, если это поможет кому-либо, и это может быть просто из-за моего непонимания промежуточного программного обеспечения, вот что мне нужно было сделать, чтобы заставить это работать (в дополнение к шагам, предпринятым @imrealashu)...
на
route.php
:Route::get('/admin', [ 'middleware' => 'admin', 'uses' => 'AdminController@index' ]);
Это
web
группа промежуточного программного обеспечения. Перед этим я попробовал поместить его в отдельныйadmin
middleware group и даже вauth:admin
группа, но это не сработало, это сработало только для меня, когда я указал промежуточное программное обеспечение как админ на самом маршруте. Я понятия не имею, почему это так, но я надеюсь, что это спасает других от вытаскивания волос, как я сделал.
в Laravel есть много пакетов генератора панели администратора. Я предпочитаю Администратор Вояджера. Установка их легкая и ветерок. Это может сэкономить вам кучу кода. Нужно просто понять как это работает. Не изобретайте велосипед.