Вы можете создавать случайные числа и кодировать их в base-36, что-то вроде этого:
rand(1e12).to_s(36)
Сгенерируйте по одному для каждого пользователя при первом использовании и сохраните его вместе с пользователем.Добавьте уникальное ограничение на ваш случайный токен (как в вашей модели, так и в базе данных) и сгенерируйте новый, если вы получите нарушение уникальности.Возможно, вы захотите записать предупреждение где-нибудь, что вы увидите его, если вам нужно будет попробовать, скажем, более пяти раз, чтобы получить уникальное значение;если вы начнете получать много предупреждений, увеличьте значение 1e12
до 1e15
(или выше).
Это даст вам токен случайного вида, прикрепленный к каждому пользователю, токены будут безопасны для URLони генерируются быстро и легко, вы не должны получать столько коллизий, и будет легко вернуться от токена к пользователю.