#laravel #hashids
#laravel #hashids
Вопрос:
У меня есть классическая таблица идентификаторов пользователей, где первичным ключом является BigIncrement.
Мне нужно скрыть значение идентификатора от пользователя. Итак, моя идея состоит в том, чтобы использовать пакеты hashIds. Что я сделал для маскировки идентификатора, так это создал мутатор в столбце id:
public function getIdAttribute($id)
{
return Hashids::connection(User::class)->encode($id);
}
Маскировка работает хорошо, но проблема возникает при попытке входа в систему.
Кажется, сеанс входа в систему не создан.
Мои вопросы:
- Почему не удается войти в систему после создания мутатора идентификатора? Я предполагаю, что для создания сеанса требуется значение идентификатора
- Есть ли лучший способ замаскировать идентификатор, помимо использования мутатора?
Комментарии:
1. В чем причина маскировки идентификатора? Вероятно, причина, по которой вы не входите в систему, заключается в том, что
encode($id)
не будет соответствовать значению в базе данных (которое не закодировано), поэтому, даже если адрес электронной почты / пароль верны, вход по найденному идентификатору не будет работать (или что-то в этом роде; Я не часто использую пакет аутентификации по умолчанию)2. Привет, Тим, спасибо за ответ. Мне нужно замаскировать идентификатор для создания ссылки.. поэтому вместо myweb.com/user/1 , я думаю, было бы неплохо, если бы ссылка была myweb.com/user /[некоторый хэшид]
3. @yangsopiana в таком случае просто создайте другой столбец и сохраните в нем какое-либо другое значение. И используйте это значение в ссылке (вы можете сохранить хэш в этом столбце, просто убедитесь, что он уникален).
4. Да, в этом случае нет причин использовать идентификатор. У Арунаса правильный подход; другой столбец или мутатор с другим именем, например,
getEncryptedIdAttribute()
, затем$user->encrypted_id
вместо$user->id
. В принципе, использование того же имени для мутатора, что и для столбца, вызовет эти непреднамеренные побочные эффекты.