在 Laravel 中间件中向请求数组添加值是一种好做法吗?
Adding values to request array in Laravel middleware is a good practice?
我有一个身份验证中间件来检查传递的 api 密钥的有效性。我从数据库中获取用户 ID 并将其存储到请求数组中,以便请求页面将获得用户 ID。
public function handle($request, Closure $next) {
$key = $request->get('key');
$user = User::where('token', '=' ,$key)->first();
if($user != null){
$request->request->add(['middlewareUserID' => $user->id]);
return $next($request);
}
else {
return response(401);
}
}
这是一个好习惯吗?
我会说在这种情况下没有必要这样做。
我会使用类似这样的代码:
use Illuminate\Contracts\Auth\Guard;
class YourMiddleware
{
protected $guard;
public function __construct(Guard $guard)
{
$this->guard = $guard;
}
public function handle($request, Closure $next) {
$key = $request->get('key');
$user = User::where('token', '=' ,$key)->first();
if(!$user){
return response(401);
}
$this->guard->setUser($user);
return $next($request);
}
}
所以当给定令牌有用户时,您可以在行 $this->guard->setUser($user);
中验证用户,当令牌无效时,您可以 return return response(401);
我认为没有必要像您显示的那样将此用户 ID 设置为请求。
我有一个身份验证中间件来检查传递的 api 密钥的有效性。我从数据库中获取用户 ID 并将其存储到请求数组中,以便请求页面将获得用户 ID。
public function handle($request, Closure $next) {
$key = $request->get('key');
$user = User::where('token', '=' ,$key)->first();
if($user != null){
$request->request->add(['middlewareUserID' => $user->id]);
return $next($request);
}
else {
return response(401);
}
}
这是一个好习惯吗?
我会说在这种情况下没有必要这样做。
我会使用类似这样的代码:
use Illuminate\Contracts\Auth\Guard;
class YourMiddleware
{
protected $guard;
public function __construct(Guard $guard)
{
$this->guard = $guard;
}
public function handle($request, Closure $next) {
$key = $request->get('key');
$user = User::where('token', '=' ,$key)->first();
if(!$user){
return response(401);
}
$this->guard->setUser($user);
return $next($request);
}
}
所以当给定令牌有用户时,您可以在行 $this->guard->setUser($user);
中验证用户,当令牌无效时,您可以 return return response(401);
我认为没有必要像您显示的那样将此用户 ID 设置为请求。