#laravel #laravel-8 #laravel-echo
#laravel #laravel-8 #laravel-echo
Вопрос:
В laravel я установил privatechannel
для широковещательной передачи websocket.
Канал такой:
Broadcast::channel('user.{id}', function ($user, $id) {
return (int) $user->id === (int) $id;
});
Итак, в этом случае я раскрываю им идентификатор пользователя как часть процесса аутентификации.
Есть ли у Laravel какой-либо другой уникальный идентификатор пользователя, который я мог бы использовать, который не передает пользователю информацию о количестве пользователей?
Например:
Broadcast::channel('user.{token}', function ($user, $token) {
return $user->some_unique_token === $token;
});
Или я должен просто использовать что-то вроде https://hashids.org/php / чтобы запутать идентификатор пользователя? (не уверен, поставляется ли Laravel с чем-то подобным?)
Комментарии:
1. Вы могли бы сохранить уникальный токен идентификатора вместе с идентификатором и показать его вместо этого, но в чем проблема с отображением их идентификатора?
2. Мне не нравится раскрывать, сколько у меня пользователей
3. Идентификатор не обязательно отражает это, пользователь с идентификатором 10 не знает, сколько пользователей было зарегистрировано с тех пор. Да, вы можете просто создать нового пользователя и проверить его идентификатор, но в чем большая проблема — я не вижу проблемы? Если это действительно серьезная проблема, просто сгенерируйте UUID для пользователя и используйте его.
Ответ №1:
попробуйте сгенерировать уникальный идентификатор пользователя (uuid) и выполнить все действия с uuid создайте еще один столбец uuid в таблице users Str::uuid();
это не покажет идентификатор пользователя Laravel Str Helper для uuid
Ответ №2:
лучшим способом для этого является использование некоторого двухстороннего алгоритма хеширования, такого как hashids, даже в JWT для предотвращения раскрытия user_id с помощью hashids — один из лучших способов
Ответ №3:
В итоге я просто создал простой метод хеширования для модели пользователя, а затем использовал его вместо идентификатора для проверки пользователя.
Это был метод, добавленный в модель пользователя:
public function hash(){
return hash('sha256',$this->id.env('APP_KEY'));
}
Затем широковещательный канал выглядит следующим образом:
Broadcast::channel('user.{hash}', function ($user, $hash) {
return $user->hash() === $hash;
});