【发布时间】:2020-09-05 09:00:11
【问题描述】:
我有这个 Laravel 应用程序 II 正在添加基于 userType 限制用户的中间件:
中间件/Client.php:
<?php
namespace App\Http\Middleware;
use Auth;
use Closure;
class Client
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// $user = $request->user();
if (Auth::check() && Auth::user()->userType == 1) {
return $next($request);
}
else {
return redirect('/');
}
}
}
我也在 kernel.php 中添加了这个:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'admin' => \App\Http\Middleware\AdminMiddleware::class,
'usertype' => \App\Http\Middleware\UserType::class,
'client' => \App\Http\Middleware\Client::class,
'staff' => \App\Http\Middleware\Staff::class,
'admin' => \App\Http\Middleware\AdminMiddleware::class,
];
但是当我在 web.php 中添加这个客户端时它不起作用:
Route::get('/client_profile','Client\ClientController@getclientdetails')->middleware('client');
如果我登录,它将处于 else 状态。我尝试打印 $user 但它返回 null
更新:
Route::get('/client_dashboard', function(){
return view('client.dashboard');
})->middleware('client');
认证.php:
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
return route('admin.login');
}
}
注意:我有 3 个用户类型,2 个用户员工和客户端在 api 上工作,管理员使用基本的 Laravel 身份验证
【问题讨论】:
-
你可以在
AppServiceProvider上做同样的事情 -
试试
middleware('auth:client'); -
middleware('client') 工作但 auth::check 和用户不工作
-
请求
/client_profile时你登录了吗? -
当我没有登录时它重定向到 / 但当我尝试登录时它仍然重定向到 /