Ошибка входа в Laravel после добавления мутатора в идентификатор пользователя

#laravel #hashids

#laravel #hashids

Вопрос:

У меня есть классическая таблица идентификаторов пользователей, где первичным ключом является BigIncrement.

Мне нужно скрыть значение идентификатора от пользователя. Итак, моя идея состоит в том, чтобы использовать пакеты hashIds. Что я сделал для маскировки идентификатора, так это создал мутатор в столбце id:

 public function getIdAttribute($id)
{ 
    return Hashids::connection(User::class)->encode($id);
}
  

Маскировка работает хорошо, но проблема возникает при попытке входа в систему.
Кажется, сеанс входа в систему не создан.

Мои вопросы:

  1. Почему не удается войти в систему после создания мутатора идентификатора? Я предполагаю, что для создания сеанса требуется значение идентификатора
  2. Есть ли лучший способ замаскировать идентификатор, помимо использования мутатора?

Комментарии:

1. В чем причина маскировки идентификатора? Вероятно, причина, по которой вы не входите в систему, заключается в том, что encode($id) не будет соответствовать значению в базе данных (которое не закодировано), поэтому, даже если адрес электронной почты / пароль верны, вход по найденному идентификатору не будет работать (или что-то в этом роде; Я не часто использую пакет аутентификации по умолчанию)

2. Привет, Тим, спасибо за ответ. Мне нужно замаскировать идентификатор для создания ссылки.. поэтому вместо myweb.com/user/1 , я думаю, было бы неплохо, если бы ссылка была myweb.com/user /[некоторый хэшид]

3. @yangsopiana в таком случае просто создайте другой столбец и сохраните в нем какое-либо другое значение. И используйте это значение в ссылке (вы можете сохранить хэш в этом столбце, просто убедитесь, что он уникален).

4. Да, в этом случае нет причин использовать идентификатор. У Арунаса правильный подход; другой столбец или мутатор с другим именем, например, getEncryptedIdAttribute() , затем $user->encrypted_id вместо $user->id . В принципе, использование того же имени для мутатора, что и для столбца, вызовет эти непреднамеренные побочные эффекты.