我能做些什么来解决这个推送错误,从auth端点返回的JSON无效,但状态代码是200



在这里问了同样的问题后,我仍然有这个问题:从auth端点返回的JSON无效,但状态代码为200,没有响应。我看过类似的问题,并遵循建议:将我的广播驱动程序设置为"pusher",在App.config文件中取消注释"App/BBroadcastServiceProvider"类,在.env文件中将调试模式设置为false,等等。我也查看了pusher文档,但问题仍未解决。

我已经通过添加"/broacasting/auth/"auth端点和标头更新了以前的尝试,但仍然存在相同的错误。但我现在可以看到302重定向到auth路由,然后302重定向到登录路由,然后在laravel望远镜上看到200响应的仪表板,这是我以前没有看到的。因此,这向我表明,添加auth端点应该可以解决问题,但事实并非如此。

我还尝试设置并使用"/pusher/auth/"auth端点路由和控制器,但它给了我一个"加载资源失败:服务器响应状态为405(方法不允许("以及";错误:无法从身份验证端点检索身份验证字符串-已从/pusher/auth接收状态:405,但不是以前的无效json错误。我通过向控制器发出"get"请求得到了这个消息,但通过"post"请求得到的500内部服务器错误。我真的不知道哪个是正确的。

这是我的bootstrap.js文件:

import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
// Enable pusher logging - don't include this in production
Pusher.logToConsole = true;
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
forceTLS: true,
authEndpoint: '/broadcasting/auth',
//authEndpoint: '/pusher/auth',
auth: {
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}',
}
}
});

这是我创建的一个pusherController:

public function pusherAuth(Request $request)
{
$key = getenv('PUSHER_APP_KEY');
$secret = getenv('PUSHER_APP_SECRET');
$app_id = getenv('PUSHER_APP_ID');
$pusher = new Pusher($key, $secret, $app_id);
$auth = $pusher->socket_auth($_GET('channel_name'), $_GET('socket_id'));

return response($auth, 200);
}

我现在知道我的vue前端文件应该接收并显示广播签出,这个问题与解决这个推送订阅错误有关。

任何帮助都将不胜感激。

检查.env是否有正确的广播驱动程序:

BROADCAST_DRIVER=pusher

我终于解决了这个问题。正如错误消息所指出的,这个问题完全是身份验证问题。虽然我仍然不知道为什么内置的"/abroadcast/auth"端点不起作用,但我最初尝试通过创建"/pusher/auth/"进行身份验证的方式在设置路由和控制器时是错误的。

正确的路由设置应该是"post"并调用控制器,使用基于闭包的路由对我不起作用。我以前(见上文(对控制器的实现也是错误的。

这是起作用的控制器代码:

namespace AppHttpControllers;
use IlluminateHttpRequest;
use PusherPusher;
class PusherController extends Controller
{
/**
* Authenticates logged-in user in the Pusher JS app
* For private channels
*/
public function pusherAuth(Request $request)
{
$user = auth()->user();
$socket_id = $request['socket_id'];
$channel_name =$request['channel_name'];
$key = getenv('PUSHER_APP_KEY');
$secret = getenv('PUSHER_APP_SECRET');
$app_id = getenv('PUSHER_APP_ID');
if ($user) {

$pusher = new Pusher($key, $secret, $app_id);
$auth = $pusher->socket_Auth($channel_name, $socket_id);
return response($auth, 200);
} else {
header('', true, 403);
echo "Forbidden";
return;
}
}
}

这是最后一个bootstrap.js文件:

import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
// Enable pusher logging - don't include this in production
Pusher.logToConsole = true;
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
forceTLS: true,
authEndpoint: '/pusher/auth',
auth: {
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}',
}
}
});

我在web.php中的路线代码:

Route::post('/pusher/auth', [PusherController::class, 'pusherAuth'])
->middleware('auth');

Pusher控制台日志:推送器::["事件记录",{"事件":"推送器内部:订阅成功","通道":"私人用户.3","数据":{}}]vendor.js:41325 Pusher::["没有对私人用户的回调。3对于Pusher:subscription_succeded"]

检查您的config/app.php并确保AppProvidersBroadcastServiceProvider::class不会从providers列表中注释掉。

BroadcastServiceProvider::class在其引导方法中包含Broadcast::routes();,该方法为广播提供身份验证路由

npm install laravel-echo

需要安装laravel echo包来授权路由

相关内容

  • 没有找到相关文章

最新更新