不向用户透露ID的Laravel标识用户
在laravel,我为websocket广播设置了一个不向用户透露ID的Laravel标识用户,laravel,laravel-8,laravel-echo,Laravel,Laravel 8,Laravel Echo,在laravel,我为websocket广播设置了一个私人频道 频道是这样的: Broadcast::channel('user.{id}', function ($user, $id) { return (int) $user->id === (int) $id; }); 因此,在本例中,作为身份验证过程的一部分,我向他们透露了用户的ID Laravel是否有任何其他我可以使用的唯一用户标识符,不会向用户泄露用户计数信息 例如: Broadcast::channel('user
私人频道
频道是这样的:
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;
});
或者我应该使用类似的东西来混淆用户ID吗?(不确定Laravel是否附带了类似的内容?尝试生成唯一用户id(uuid)并使用uuid完成所有工作,将uuid的另一列放入用户表Str::uuid()代码>这不会显示用户id最好的方法是使用一些双向哈希算法,如hashID
即使在JWT中,使用HashID防止用户id被泄露也是最好的方法之一。最后,我为用户模型创建了一个简单的哈希方法,然后用它代替id来验证用户
这是添加到用户模型的方法:
public function hash(){
return hash('sha256',$this->id.env('APP_KEY'));
}
然后广播频道是这样的:
Broadcast::channel('user.{hash}', function ($user, $hash) {
return $user->hash() === $hash;
});
您可以将唯一标识符标记与ID一起存储并显示,但显示他们的ID有什么问题?我不想透露我有多少用户ID不一定反映了这一点,ID为10的用户不知道从那时起注册了多少用户。是的,您可以创建一个新用户并检查其ID,但最大的问题是什么?我看不到问题所在?如果这确实是一个主要问题,那么只需为用户生成一个UUID并使用它即可。