php 使用Laravel Websockets/Echo基于条件而不是Auth系统对用户进行身份验证?

wmvff8tz  于 2023-03-28  发布在  PHP
关注(0)|答案(1)|浏览(105)

我期待为我的一个应用程序创建一个聊天系统,一个经过身份验证的用户可以创建公共或私人事件的应用程序.我正在使用Laravel Websockets和Laravel Echo.当我创建一个私人通道和一个用户没有登录,我得到一个403错误,这是罚款.身份验证或“握手”,基于Laravel默认的身份验证系统。是否可以使用条件来允许/禁止访问私有通道,而不是Laravel的Auth系统?例如,如果一个ID的用户存在于不同的表中,而不是用户表?
假设我有一个名为reg_users的事件表(用于注册用户),URL中的ID为ud4x7mw,我只是想检查具有该ID的用户是否存在,如果他们允许他们访问通道,如果不允许,则拒绝他们访问。

ffx8fchx

ffx8fchx1#

这是可能的,您可以在config/auth.php中为reg_users添加guard和provider

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'reg_users' => [
        'driver' => 'session',
        'provider' => 'reg_users',
    ],
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
    
    'reg_users' => [
        'driver' => 'eloquent',
        'model' => App\Models\RegUser::class,
    ],
],

然后在你的routes/channels.php中你可以指定你使用的是哪一个保护:

Broadcast::channel('SomeChannel', function ($user) {
    return true;
}, ['guards' => ['reg_users']]);

相关问题