我有以下文件:
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
的{{1}}会返回Authenticate.php
个实例,其属性为SessionGuard
设置为name
但是,我确实指定了#auth:客户端用户'在控制器的构造函数中。 所以我的第一个想法是认证中间件是全球中间件所以我检查了,但它不是。如果我从构造函数中删除中间件行,则会显示该页面。
有谁知道问题出在哪里?
谢谢。
答案 0 :(得分:0)
显然,传递给__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);
}
}