在控制器中处理请求数据会导致工匠错误


Dealing with request data in controller leads to artisan errors

我有负责处理API请求的控制器。在每个构造中,我使用JWTAuth类:

public function __construct()
{
    $this->authenticatedUser = JWTAuth::parseToken()->authenticate();
}

当我运行php artisan route:list命令时,我得到了JWT无法解析令牌的错误。很明显,当使用CLI命令时,我没有会话数据。

当我在构造函数中使用session时,我也会得到类似的错误。

是否有任何方法来避免工匠错误,因为它看起来不方便:我想在构造函数中使用一些属性,但如果它们依赖于请求数据,我就不能。

处理它的最好方法是检查应用程序是否没有在cli中运行。你可以通过'App::runningInConsole()来做。所以在构造函数中do(最简单的方法)

if ( ! 'App::runningInConsole()) {
    $this->authenticatedUser = JWTAuth::parseToken()->authenticate();
}

但是我建议你把它移到一个抽象的ApiController或service甚至helper中,这样就不会每次都复制/跳过它

先验证用户。

    if (!$this->authenticatedUser = JWTAuth::parseToken()->authenticate()) {
        return response()->json(['message' => 'Not found'], 404);
    }

这对于API内部的验证也很好,因为使用API的人可能会得到类似的错误。