我该怎么做才能解决从 auth 端点返回的推送器 error-JSON 无效,但状态代码为 200?
What can I do to resolve this pusher error-JSON returned from auth endpoint was invalid, yet status code was 200?
我在这里问了同样的问题后仍然有这个问题:JSON returned from auth endpoint was invalid, yet status code was 200 没有回应。我看过类似的问题并关注了
建议:将我的广播 driver 设置为 'pusher',在我的 app.config 文件中取消注释 'App/BroadcastServiceProvider' class,在我的 .env 文件中将调试模式设置为 false,等等。我也看过 pusher 文档,但问题对我来说仍然没有解决。
我已经通过添加“/broadcasting/auth/”身份验证端点和 headers 更新了我之前的尝试,但仍然出现相同的错误。但我现在可以看到一个 302 重定向到 auth 路由,然后一个 302 重定向到登录路由,然后到仪表板,在 laravel telescope 上有一个 200 响应,这是我以前没有看到的。所以这向我表明,添加身份验证端点应该可以解决问题,但事实并非如此。
我还尝试设置并使用“/pusher/auth/”身份验证端点路由和控制器,但它给了我一个 'Failed to load resource: the server responded with a status of 405 (Method Not Allowed)' 以及“错误:无法从身份验证端点检索身份验证字符串- 收到状态:来自 /pusher/auth 的 405,但不是先前的无效 json 错误。我通过对控制器的 'get' 请求得到了这个,但是 500 内部服务器错误 'post' 请求。我真的不知道哪个是正确的。
这是我的 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 前端文件已签出,问题与解决此推送器订阅错误有关。
我们将不胜感激。
我终于能够解决这个问题。正如错误消息所指出的那样,该问题完全是身份验证问题。虽然我仍然不知道为什么内置的“/broadcast/auth”端点不起作用,但我最初通过创建“/pusher/auth/”来进行身份验证的尝试在我设置路由的方式上是错误的和控制器。
正确的路由设置应该是 'post' 并调用控制器,使用基于闭包的路由对我不起作用。我以前(见上文)控制器的实现也是错误的。
这是有效的控制器代码:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Pusher\Pusher;
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_internal:subscription_succeeded”,“频道”:“private-user.3”,“数据”:{}}]
vendor.js:41325 Pusher : : [“pusher:subscription_succeeded 的私人用户 3 上没有回调”]
检查您的 .env
以获得正确的广播驱动程序:
BROADCAST_DRIVER=pusher
我在这里问了同样的问题后仍然有这个问题:JSON returned from auth endpoint was invalid, yet status code was 200 没有回应。我看过类似的问题并关注了 建议:将我的广播 driver 设置为 'pusher',在我的 app.config 文件中取消注释 'App/BroadcastServiceProvider' class,在我的 .env 文件中将调试模式设置为 false,等等。我也看过 pusher 文档,但问题对我来说仍然没有解决。
我已经通过添加“/broadcasting/auth/”身份验证端点和 headers 更新了我之前的尝试,但仍然出现相同的错误。但我现在可以看到一个 302 重定向到 auth 路由,然后一个 302 重定向到登录路由,然后到仪表板,在 laravel telescope 上有一个 200 响应,这是我以前没有看到的。所以这向我表明,添加身份验证端点应该可以解决问题,但事实并非如此。
我还尝试设置并使用“/pusher/auth/”身份验证端点路由和控制器,但它给了我一个 'Failed to load resource: the server responded with a status of 405 (Method Not Allowed)' 以及“错误:无法从身份验证端点检索身份验证字符串- 收到状态:来自 /pusher/auth 的 405,但不是先前的无效 json 错误。我通过对控制器的 'get' 请求得到了这个,但是 500 内部服务器错误 'post' 请求。我真的不知道哪个是正确的。
这是我的 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 前端文件已签出,问题与解决此推送器订阅错误有关。
我们将不胜感激。
我终于能够解决这个问题。正如错误消息所指出的那样,该问题完全是身份验证问题。虽然我仍然不知道为什么内置的“/broadcast/auth”端点不起作用,但我最初通过创建“/pusher/auth/”来进行身份验证的尝试在我设置路由的方式上是错误的和控制器。
正确的路由设置应该是 'post' 并调用控制器,使用基于闭包的路由对我不起作用。我以前(见上文)控制器的实现也是错误的。
这是有效的控制器代码:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Pusher\Pusher;
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_internal:subscription_succeeded”,“频道”:“private-user.3”,“数据”:{}}] vendor.js:41325 Pusher : : [“pusher:subscription_succeeded 的私人用户 3 上没有回调”]
检查您的 .env
以获得正确的广播驱动程序:
BROADCAST_DRIVER=pusher