我遇到了一个问题,在vite和laravel framework(9.44)中使用spatie/laravel-csp(v2.8.2)时,“nonce”值总是空的。我按照github页面上的说明进行了操作。以下是我的配置:
app/http/Kernel.php
protected $middlewareGroups = [
'web' => [
...
\Spatie\Csp\AddCspHeaders::class
],
config/csp.php
'nonce_generator' => App\Support\LaravelViteNonceGenerator::class,
used策略使用spatie的basic policy中的nonce指令。
LaravelViteNonceGenerator.php
namespace App\Support;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Vite;
use Spatie\Csp\Nonce\NonceGenerator;
class LaravelViteNonceGenerator implements NonceGenerator
{
public function generate(): string
{
return Vite::useCspNonce();
}
}
在我的脑海中
@viteReactRefresh
@vite('resources/js/app.jsx')
当我使用@nonce
指令时,nonce具有与页面上Content-Security-Policy头中所示相同的随机字符串值,但脚本标记没有将其作为属性获取。
更多信息:vite:3.2.4@vitejs/插入React:2.2.0拉腊维尔-维特-插件:0.6.1
我做错了什么?
1条答案
按热度按时间zd287kbt1#
为了防止其他人也在寻找这个问题,我找到了一个解决方案。缺少的键是
csp_nonce()
指令。所以我用csp_nonce()
指令创建了一个 meta标记,如下所示:之后,我的vite注入的JS和CSS文件获得了nonce属性,浏览器不再阻止内容。