Laravel 不向用户透露 ID 的身份用户

Laravel Identity User without revealing ID to the user

在 laravel 中,我设置了一个 privatechannel 用于 websocket 广播。

频道是这样的:

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 放入用户 table Str::uuid(); 这不会泄露用户 ID Laravel Str Helper for uuid

最好的方法是使用像 hashids 这样的双向哈希算法 即使在 JWT 中,为了防止 user_id 被泄露,使用 hashids 也是最好的方法之一

最后我只是为用户模型创建了一个简单的哈希方法,然后用它代替 ID 来验证用户。

这是添加到用户模型的方法:

public function hash(){
    return hash('sha256',$this->id.env('APP_KEY'));
}

然后广播频道是这样的:

Broadcast::channel('user.{hash}', function ($user, $hash) {
    return $user->hash() === $hash;
});