Đây là những gì tôi đang sử dụng. Mã thông báo không nhất thiết phải được nghe để đoán, nó giống như một mã định danh url ngắn hơn bất kỳ thứ gì khác và tôi muốn giữ nó ngắn. Tôi đã theo dõi một số ví dụ tôi đã tìm thấy trực tuyến và trong trường hợp xảy ra va chạm, tôi nghĩ mã dưới đây sẽ tạo lại mã thông báo, nhưng tôi không chắc lắm. Tôi tò mò muốn xem các đề xuất tốt hơn, mặc dù, vì điều này cảm thấy một chút xung quanh các cạnh.
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
Cột cơ sở dữ liệu của tôi cho mã thông báo là một chỉ mục duy nhất và tôi cũng đang sử dụng validates_uniqueness_of :token
trên mô hình, nhưng vì chúng được tạo theo lô tự động dựa trên hành động của người dùng trong ứng dụng (về cơ bản họ đặt hàng và mua mã thông báo) không khả thi để ứng dụng ném lỗi.
Tôi cũng có thể, tôi đoán, để giảm cơ hội va chạm, nối thêm một chuỗi khác vào cuối, thứ gì đó được tạo ra dựa trên thời gian hoặc thứ gì đó tương tự, nhưng tôi không muốn mã thông báo quá dài.