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;
});
在 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;
});