Inilah yang saya gunakan. Token tidak harus didengar untuk menebak, ini lebih seperti pengidentifikasi url pendek daripada yang lainnya, dan saya ingin tetap singkat. Saya telah mengikuti beberapa contoh yang saya temukan online dan jika terjadi tabrakan, saya pikir kode di bawah ini akan membuat ulang token, tapi saya tidak begitu yakin. Saya ingin tahu melihat saran yang lebih baik, karena ini terasa agak kasar di tepinya.
def self.create_token
random_number = SecureRandom.hex(3)
"1X#{random_number}"
while Tracker.find_by_token("1X#{random_number}") != nil
random_number = SecureRandom.hex(3)
"1X#{random_number}"
end
"1X#{random_number}"
end
Kolom basis data saya untuk token adalah indeks unik dan saya juga menggunakan validates_uniqueness_of :token
pada model, tetapi karena ini dibuat dalam batch secara otomatis berdasarkan tindakan pengguna di app (mereka melakukan pemesanan dan membeli token, pada dasarnya), itu tidak layak untuk membuat aplikasi melempar kesalahan.
Saya juga bisa, saya kira, untuk mengurangi kemungkinan tabrakan, menambahkan string lain pada akhirnya, sesuatu yang dihasilkan berdasarkan waktu atau sesuatu seperti itu, tetapi saya tidak ingin token terlalu lama.