【问题标题】:laravel reactjs pusher: presence channel response is 302laravel reactjs pusher:存在通道响应为302
【发布时间】:2020-07-09 09:13:12
【问题描述】:

我正在尝试制作一个 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 重定向?

【问题讨论】:

    标签: reactjs laravel pusher pusher-js


    【解决方案1】:

    最近我的 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 中的 broadcasting/auth 路由。

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

    【讨论】:

    • 好的,所以它返回一个带有授权密钥的 200 代码,但我怎样才能加入频道? Echo.join('game.0') .here((users) => { alert("In the channel!"); }) 这没有触发 :(
    • 你需要自己配置。我推荐这个link 让你了解 Laravel 上的在线通道。但是,您还需要查看您的浏览器 chrome dev-tools 网络选项卡。在网络选项卡中选择 WS,您可以在那里看到您的 websocket。确保订阅频道成功,并且 web socket 的 Messages 中没有带有 Invalid Signature 的消息。如果有任何其他问题,请告诉我。
    • 它只是不起作用,根本没有订阅消息:/我打开了一个新帖子[链接](stackoverflow.com/questions/61177471/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 2020-03-30
    相关资源
    最近更新 更多