У меня есть следующие файлы:
routes.php
Route::get('client-portal', 'DashboardController@index');
DashboardController.php
public function __construct()
{
$this->middleware('auth:client-users');
}
auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'client-users' => [
'driver' => 'session',
'provider' => 'client-users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'client-users' => [
'driver' => 'eloquent',
'model' => \App\Models\ClientPortal\User::class
],
],
Authenticate.php
public function __construct(Guard $auth) {
$this->auth = $auth;
}
public function handle($request, Closure $next)
{
if ($this->auth->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
dd($this->auth);
return redirect()->guest('login');
}
}
return $next($request);
}
Всякий раз, когда я вошел через client-users
и перейдите к /client-portal.
dd
от Authenticate.php
возвращает SessionGuard
экземпляр, с атрибутом name
установлен в web
Но я указал ‘auth: client-users’ в конструкторе контроллера.
Поэтому моей первой мыслью было, что промежуточное программное обеспечение для аутентификации было глобальным промежуточным программным обеспечением, поэтому я проверил это, но это не так. Если я удаляю промежуточную строку из конструктора, страница отображается.
Кто-нибудь знает, в чем проблема?
Спасибо.
Видимо экземпляр, который передается __construct
не поддерживает :
запись для указания охранника. это Authenticate.php
был оригинальный файл из предыдущей версии laravel. guard
атрибут передается в качестве третьего параметра handle
,
Я исправил код следующим образом:
class Authenticate
{
public function handle($request, Closure $next, $guard = null)
{
auth()->shouldUse($guard);
if (auth()->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
}
return $next($request);
}
}
Других решений пока нет …