Идентификация пользователя Laravel без раскрытия идентификатора пользователю

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