在laravel中,我为websocket广播设置了一个privatechannel
。
通道是这样的:
Broadcast::channel('user.{id}', function ($user, $id) {
return (int) $user->id === (int) $id;
});
因此,在这种情况下,作为身份验证过程的一部分,我将向他们透露用户的ID。
Laravel是否有任何其他我可以使用的唯一用户标识符,不会向用户泄露用户计数信息?
例如:
Broadcast::channel('user.{token}', function ($user, $token) {
return $user->some_unique_token === $token;
});
或者我应该用这样的东西https://hashids.org/php/混淆用户ID?(不确定Laravel是否携带这样的东西?(
尝试生成唯一的用户id(uuid(,并用uuid做所有事情,将uuid的另一列放入用户表Str::uuid();
,这不会显示uuid 的用户id Laravel Str Helper
最好的方法是使用一些双向散列算法,比如散列即使在JWT中,使用哈希来防止user_id被泄露也是的最佳方法之一
最后,我只是为用户模型创建了一个简单的哈希方法,然后使用它而不是ID来验证用户。
这是添加到用户模型中的方法:
public function hash(){
return hash('sha256',$this->id.env('APP_KEY'));
}
然后广播频道如下:
Broadcast::channel('user.{hash}', function ($user, $hash) {
return $user->hash() === $hash;
});