0

我正在尝试制作一个 reactjs 应用程序,其中用户一次只能使用相同的用户凭据登录到一台设备。不幸的是,它不起作用。

我正在尝试使用 reactjs 对 laravel 的存在通道进行身份验证,但我得到了 302 响应。

反应:

    Pusher.logToConsole = true;

    var pusher = new Pusher("9028d58568392772df59", {
        cluster: "eu",
        forceTLS: true,
        authEndpoint: '/broadcasting/auth',
        auth: {
            headers: {
              'X-CSRF-Token': csrf_token
            }
          }
    });

    var channel = pusher.subscribe("presence-HandleCredentials");
    channel.bind("sameCredentials", function(data) {
        console.log(data);
        alert(JSON.stringify(data));
    });

渠道:

Broadcast::channel('App.User', function ($user, $id = 1) {
    return (int) $user->id === (int) $id;
});

播送:

    public function boot()
    {
        Broadcast::routes(['middleware' => ['auth:web']]);

        require base_path('routes/channels.php');
    }

当我添加这个 ['middleware' => ['auth:web']] 我得到了错误。在我添加之前,我收到了 403 错误。

在 config\app.php 我没有注释App\Providers\BroadcastServiceProvider::class,

是否有任何使用 laravel 和 reactjs 构建的用于存在通道的教程?有谁知道如何通过这个 302 重定向?

4

1 回答 1

0

最近我的 laravel-websockets 和 laravel echo 遇到了同样的问题。在我的情况下,我无法解决 302,因为广播无法验证我的登录用户。我试图订阅我的私人频道。所以我发现的解决方法是我在 web.php 中手动创建了一个 POST 路由作为“/broadcasting/auth”。这就是我的前端要求的。所以web.php中更新的代码如下。

Route::post('/broadcasting/auth', function(Request $request){
$pusher = new Pusher\Pusher(
    env('PUSHER_APP_KEY'),
    env('PUSHER_APP_SECRET'),
    env('PUSHER_APP_ID'),
    array(
        'cluster' => env('PUSHER_APP_CLUSTER'),
        'useTLS' => false,
        'host' => env('APP_URL'),
        'port' => 6001,
        'scheme' => 'http',
    )
);
return $pusher->socket_auth($request->request->get('channel_name'),$request->request->get('socket_id'));

});

我正在创建自己的 websocket,这就是为什么我必须在选项中提及主机和端口的原因,如果您使用 Pusher,则不需要使用它。如果需要,您还可以将其他中间件添加到路由中。您必须在app/providers/BroadcastServiceProvider中注释掉以下行:

public function boot()
{
    // Broadcast::routes();
    require base_path('routes/channels.php');
}

以便请求可以到达我在 web.php 中的广播/身份验证路由。

尝试这个。现在,当您的客户端请求广播/身份验证并响应身份验证代码时,这应该返回 200。如果这能解决您的问题,请告诉我。

于 2020-04-06T15:30:03.400 回答