我正在尝试通过Laravel的5.3 API路由逻辑和JWT构建静态HTML查看器。这些文件都存储在S3上,需要加以保护,所以我认为最好的方法是创建一种所有文件都通过的代理。这样我就可以从API请求中检查用户的令牌并相应地加载文件。
第一个文件加载正常。
http://example.com/api/proxy/file.html?token={token}
当HTML文件尝试从自身加载文件时出现问题。它在我删除身份验证功能时起作用,因此我知道获取文件不是问题。这是因为令牌未附加到将来的请求中。它在没有令牌的情况下发送它。
http://example.com/api/proxy/some_image.png
我尝试将以下代码添加到令牌检查器逻辑中。
public function __construct(JWTAuth $jwtAuth)
{
$this->middleware(function ($request, $next) use ($jwtAuth) {
if (!$jwtAuth->getToken()) {
if (!Auth::user()) {
return response()->error('The token could not be parsed from the request', 400);
} else {
$this->authUser = Auth::user();
}
} else {
$this->authUser = $jwtAuth->parseToken()->authenticate();
Auth::setUser($this->authUser);
}
return $next($request);
});
}
但由于某种原因,这不起作用。当第一个.html加载令牌时,它会尝试使用Laravel的Auth中间件对用户进行身份验证,但Auth :: user()会在图像请求中返回null。