Laravel 回显导致 post 路由失败
Laravel Echo causing post routes to fail
当我不在 bootstrap.js
中指定 Laravel Echo 时,应用程序工作正常。
composer.json
"require": {
"laravel/framework": "5.4.*",
"pusher/pusher-php-server": "~2.6",
},
package.json
"dependencies": {
"laravel-echo": "^1.3.2",
"pusher-js": "^4.1.0",
}
bootstrap.js
import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'app-key',
cluster: 'eu',
encrypted: true
});
broadcasting.php
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => 'eu',
'encrypted' => true
],
],
我在我的本地主机上,并尝试遵循多个教程和许多变体,但 none 已经解决了问题。应用程序正确加载所有 get api 路由,但当我尝试登录时出现 500 错误。
我也在使用 Vue & VueRouter 以防有任何影响。
编辑
似乎有什么东西干扰了用 axios 发送的 CsrfToken。如果我重新排列我的 bootstrap.js 文件,以便在 axios:
之前导入 Echo
import Echo from 'laravel-echo';
etc.
window.axios = require('axios');
post 路由完美运行,但是当我通过 axios post 路由提交它们时我无法收听任何事件(如果我通过 Artisan 控制台命令提交事件它工作正常我可以收听响应并将其输出到控制台)。
如果我在事件构造函数中 dd('test')
,post 路由输出 test
。
如果我在 broadcastOn 方法中 dd('test')
,post 路由不会命中此函数。
您可能需要在 laravel-echo
之前导入 pusher-js
。
window.Pusher = require('pusher-js');
import Echo from 'laravel-echo';
如果有人遇到类似问题,解决方案:不要使用Laravel Echo。
删除 Echo 并在主应用程序 js 之前直接拉入 Pusher (https://js.pusher.com/4.1/pusher.min.js
)。然后在 bootstrap.js
文件的底部:
window.Pusher = new Pusher('app-key', {
cluster: 'your-cluster',
encrypted: (true/false),
auth: {
headers: {
'X-CSRF-Token': token.content
}
}
});
现在您可以执行类似以下操作:
var channel = Pusher.subscribe('channel-name');
channel.bind('broadcast-event-name', function(data) {
console.log(data);
});
当我不在 bootstrap.js
中指定 Laravel Echo 时,应用程序工作正常。
composer.json
"require": {
"laravel/framework": "5.4.*",
"pusher/pusher-php-server": "~2.6",
},
package.json
"dependencies": {
"laravel-echo": "^1.3.2",
"pusher-js": "^4.1.0",
}
bootstrap.js
import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'app-key',
cluster: 'eu',
encrypted: true
});
broadcasting.php
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => 'eu',
'encrypted' => true
],
],
我在我的本地主机上,并尝试遵循多个教程和许多变体,但 none 已经解决了问题。应用程序正确加载所有 get api 路由,但当我尝试登录时出现 500 错误。
我也在使用 Vue & VueRouter 以防有任何影响。
编辑
似乎有什么东西干扰了用 axios 发送的 CsrfToken。如果我重新排列我的 bootstrap.js 文件,以便在 axios:
之前导入 Echoimport Echo from 'laravel-echo';
etc.
window.axios = require('axios');
post 路由完美运行,但是当我通过 axios post 路由提交它们时我无法收听任何事件(如果我通过 Artisan 控制台命令提交事件它工作正常我可以收听响应并将其输出到控制台)。
如果我在事件构造函数中 dd('test')
,post 路由输出 test
。
如果我在 broadcastOn 方法中 dd('test')
,post 路由不会命中此函数。
您可能需要在 laravel-echo
之前导入 pusher-js
。
window.Pusher = require('pusher-js');
import Echo from 'laravel-echo';
如果有人遇到类似问题,解决方案:不要使用Laravel Echo。
删除 Echo 并在主应用程序 js 之前直接拉入 Pusher (https://js.pusher.com/4.1/pusher.min.js
)。然后在 bootstrap.js
文件的底部:
window.Pusher = new Pusher('app-key', {
cluster: 'your-cluster',
encrypted: (true/false),
auth: {
headers: {
'X-CSRF-Token': token.content
}
}
});
现在您可以执行类似以下操作:
var channel = Pusher.subscribe('channel-name');
channel.bind('broadcast-event-name', function(data) {
console.log(data);
});