2017-12-18 76 views
1

我有一个身份验证中间件来检查传递API密钥的有效性。我从数据库存储中将用户标识提取到请求数组,以便请求页面将获得用户标识。在Laravel中间件中向请求数组添加值是一种很好的做法?

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); 
        } 
    } 

这是一个很好的做法吗?

+0

也许更适合[代码审查](https://codereview.stackexchange.com/)? – FirstOne

回答

1

我会说在这种情况下这不是必需的。

我会用类似的代码如下:

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 response(401);

我不没有看到任何需要设置此用户标识以请求显示。

+0

对不起,这个卫兵是什么? –

+1

正如你在上面看到的那样,这是'\ Illuminate \ Contracts \ Auth \ Guard',它允许你在应用程序的后面任何地方验证用户,你可以使用'auth() - > user()'来获得已验证的用户或'$ request-> user()'来获取用户实例。 –

相关问题