Ich habe ein Formular auf einer Website, das einige persönliche Informationen vom Besucher aufnimmt. Ich übergebe diese Information an einen anderen Dienst und ich muss jedem dieser Formular-Submits einen eindeutigen 100-Zeichen-Hash zuordnen, der in der Datenbank mit dem Datensatz gespeichert wird. Was ist der optimale Weg, um diesen Schlüssel zu generieren und sicherzustellen, dass er einzigartig ist? Es ist in Ordnung, wenn der Schlüssel automatisch erhöht wird.Jedem Benutzer einen eindeutigen Hash mit 100 Zeichen in Ruby on Rails zuweisen
9
A
Antwort
22
ActiveSupport::SecureRandom.hex(50)
Die Wahrscheinlichkeit, dass dies nicht einzigartig ist, ist astronomisch.
Alternative einfache "nicht skalieren" Race Condition Fail-Lösung.
class MyModel < ActiveRecord::Base
before_create :assign_unique_token
private
def assign_unique_token
self.unique_token = ActiveSupport::SecureRandom.hex(50) until unique_token?
end
def unique_token?
self.class.count(:conditions => {:unique_token => unique_token}) == 0
end
end
Wenn Sie wirklich sicherstellen möchten, einen eindeutigen Index für die Spalte machen, und eine DB von erneuten Versuch, ähnlich wie meine Implementierung über Einzigartigkeit Fehler behandeln.
2
Der Ruby-Standard lib hat ein Modul zum Erzeugen von GUIDs:
http://ruby-doc.org/stdlib/libdoc/digest/rdoc/classes/Digest/SHA2.html
Beispiel:
Digest::SHA1.hexdigest(Time.now.to_s)
0
Wenn Sie eine Cipher können Sie immer wieder anders Nachricht verschlüsseln eine immer wieder anders zu bekommen Schlüssel:
def encrypt(data, key, cipher_type)
aes = OpenSSL::Cipher::Cipher.new(cipher_type)
aes.encrypt
aes.key = key
aes.update(data) + aes.final
end
>> Base64.encode64(encrypt(Time.now.to_s, "some_key_long_enough_for_the_job", "AES-256-ECB"))
=> "sKJU3qhszV30Ya9vMFvbqIXus+QygICdDyr7UQFWLeM=\n"
Verwandte Themen
- 1. ruby on rails Konvertierung in Benutzer Zeitzone
- 2. Ruby on Rails Benutzerdefinierte Hash-Routen
- 3. Ruby on Rails: Löschen mehrerer Hash-Schlüssel
- 4. Ruby on Rails mit chargify
- 5. Ruby on Rails Entschlüsselung
- 6. einen Einkaufswagen in Ruby on Rails
- 7. Ruby on Rails polymorphe Assoziation
- 8. Ruby on Rails Beziehungen
- 9. Ruby on Rails mehrere Assoziationen mit dem gleichen Modell
- 10. Ruby On Rails Application.html.haml
- 11. Ruby-on-Rails-Modell mit mehreren Eltern
- 12. Kontrollkästchen ausblenden und Wert zuweisen - Ruby on Rails - Einfache Frage
- 13. Parsing in Ruby (on Rails)
- 14. Sicherheit in angular.js mit Ruby on Rails
- 15. Ruby on Rails Resque führen Parameter als Hash
- 16. SSL mit Ruby on Rails
- 17. Ruby on Rails Libelle
- 18. Ruby on Rails - Modell Hash für Select Tag
- 19. Ruby on rails Pfadhelfer
- 20. Antipatterns mit Ruby on Rails
- 21. Ruby on Rails mit image_tag
- 22. Transaktionsaktion mit Ruby On Rails
- 23. Curl on Ruby on Rails
- 24. Ruby on rails Queing
- 25. Ruby on Rails - globale Variable?
- 26. Ruby on Rails - Erste Parameterwerte als Hash onside Controller
- 27. Ruby-on-Rails Authentifizierungsanleitung
- 28. Node.js vs Ruby on Rails
- 29. Verwenden Sie "Datenbank Benutzer" in Ruby on Rails zu authentifizieren
- 30. LocalJumpError (Ruby on Rails)
In Rails über 3.1 wurde dies nur "SecureRandom.hex (50)". – Bulat
Zwei Dinge erwähnenswert, blies nur 10 Minuten: 1. 'SecureRandom.hex (n)' verdoppelt 'n' als Zeichenlänge im generierten Code (so nichts über 120 oder was auch immer für Postgres String-Typen) 2. Vergessen Sie nicht, Ihr Modell nach der Zuweisung des Wertes zu speichern! (Duh) –