Проверьте, остались ли какие-либо уникальные токены определенной длины символа
У меня есть модель Post с атрибутом token
,
я использую SecureRandom.urlsafe_base64(length_of_token)
создать токен.
Маркер не должен быть неуязвимым, но должен быть уникальным.
Я начинаю с токенов длиной 1 символ, и когда они все израсходованы (все 64 комбинации), я должен перейти к токенам длиной 2 символа.
Как мне проверить, есть ли какие-либо вариации токенов для токенов длиной 3 символа?
1 ответ
Это было бы что-то вроде:
64**n - Post.count(:token).where('char_length(token) = ?', n)
Первая часть дает количество возможных комбинаций, а вторая - количество записей с длиной токена n.
Но не забывайте, что ваш генератор случайных чисел не обязательно будет генерировать оставшиеся возможные комбинации. Со временем будет экспоненциально увеличиваться число столкновений, поэтому я бы настоятельно не рекомендовал такой тип реализации.
Обратите внимание char_length
Это специфичное для MySQL условие, поэтому в зависимости от вашей СУБД вам придется адаптировать эту часть.