여기 내가 사용하는 것이 있습니다. 토큰은 반드시 추측 할 필요는 없으며 다른 것보다 짧은 URL 식별자와 비슷하며 짧게 유지하고 싶습니다. 온라인에서 찾은 몇 가지 예를 따랐으며 충돌이 발생하면 아래 코드가 토큰을 다시 만들 것이라고 생각 하지만 확실하지 않습니다. 그래도 가장자리가 조금 거칠어지기 때문에 더 나은 제안이 궁금합니다.
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
토큰에 대한 내 데이터베이스 열은 고유 인덱스이며 validates_uniqueness_of :token
모델 에서도 사용 하고 있지만 앱에서 사용자의 작업에 따라 자동으로 배치로 생성되기 때문에 (주문을하고 토큰을 구매해야 함) 앱에 오류가 발생하는 것은 불가능합니다.
충돌 가능성을 줄이고 마지막에 다른 문자열을 추가하거나 시간 또는 그와 같은 것을 기반으로 생성 된 문자열을 추가 할 수는 있지만 토큰이 너무 오래 걸리는 것을 원하지 않습니다.