Laravel Echo认证请求未携带Cookie至请求头,如何解决?
- 别手动设置
Cookie请求头,浏览器会根据withCredentials自动处理Cookie的发送,手动设置大概率会被浏览器的安全机制拦截,尤其是跨域场景下。 - 确保后端CORS配置允许携带凭证,同时指定具体的前端域名(不能用
*)。
修改后的前端代码
window.Echo = new Echo({ broadcaster: 'reverb', wsHost: 'localhost', key: 'yn0yitpyoptuuqiyjrhm', wsPort: 8080, wssPort: 8080, forceTLS: false, authEndpoint: 'http://localhost:8000/broadcasting/auth', headers: { Authorization: `Bearer ${token}`, // 移除手动添加的Cookie字段 }, withCredentials: true, enabledTransports: ['ws', 'wss'], });
后端Laravel CORS配置调整
修改config/cors.php文件:
return [ 'paths' => ['api/*', 'broadcasting/auth'], 'allowed_methods' => ['*'], 'allowed_origins' => ['http://localhost:8080'], // 替换成你的前端实际域名/端口 'allowed_origins_patterns' => [], 'allowed_headers' => ['*'], 'exposed_headers' => [], 'max_age' => 0, 'supports_credentials' => true, // 必须设为true,允许携带凭证 ];
关键说明
withCredentials: true是核心,它告诉浏览器在跨域请求中携带Cookie等凭证信息。- 后端必须开启
supports_credentials,同时allowed_origins不能用通配符,否则浏览器会拒绝发送Cookie。 - 浏览器只会自动发送与
authEndpoint域名匹配的Cookie,确保前端页面的Cookie是后端设置的对应域名下的凭证。
内容的提问来源于stack exchange,提问作者Arman Ali
相关产品推荐
相关产品推荐

