我有负责处理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的人可能会得到类似的错误。