Ho un modulo su un sito Web che raccoglie alcune informazioni personali dal visitatore. Trasmetto queste informazioni a un altro servizio e devo assegnare a ciascuna di queste forme un hash unico di 100 caratteri da memorizzare nel DB con il record. Qual è il modo ottimale per generare questa chiave e assicurarti che sia unica? Va bene se il tasto si incrementa automaticamente.Assegnazione a ciascun utente di un Hash univoco di 100 caratteri in Ruby on Rails
9
A
risposta
22
ActiveSupport::SecureRandom.hex(50)
La possibilità di non essere unici è astronomica.
Alternativa semplice "non scala".
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
Se davvero vuole fare in modo, fa un indice univoco sulla colonna, e gestire un errore di unicità DB da riprovare, simile alla mia implementazione sopra.
2
Il lib standard di Ruby ha un modulo per i GUID che generano:
http://ruby-doc.org/stdlib/libdoc/digest/rdoc/classes/Digest/SHA2.html
Esempio:
Digest::SHA1.hexdigest(Time.now.to_s)
0
Se si utilizza un Cipher è possibile crittografare un messaggio sempre diverso per ottenere una sempre diversa chiave:
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"
Problemi correlati
- 1. Ruoli utente multipli in Ruby on Rails
- 2. Ruby on Rails Interpolazione I18n
- 3. Associazione polimorfica Ruby on Rails
- 4. Assegnazione di una profondità a ciascun nodo
- 5. downgrade di Ruby on Rails
- 6. Ruby on Rails: menu a discesa
- 7. Assegnazione di stringhe a matrici di caratteri
- 8. Curl on Ruby on Rails
- 9. Ruby on rails 4 problema di registrazione
- 10. Autenticazione di Windows con Ruby on Rails
- 11. Docsplit Ruby on Rails
- 12. Domanda di sintassi di Ruby on Rails
- 13. Errori di convalida di Ruby on Rails
- 14. Campo Ruby on Rails medio?
- 15. Integrazione di Ruby on Rails con Wordpress
- 16. Ruby on Rails redirect_to arguments
- 17. Ruby on Rails - Global Variable?
- 18. Ruby on rails e Node.js
- 19. Triplo join in Ruby on Rails
- 20. HTTPClient :: ReceiveTimeoutError in Ruby on Rails
- 21. caratteri internazionali utilizzando RSpec con Ruby on Rails
- 22. Ruby On Rails Modello utente per più tipi
- 23. Cos'è l'ORM correlato a Ruby on Rails?
- 24. stringa di convertire in funzione nel ruby-on-rails
- 25. Come faccio a separare ed estrarre un array da un array di hash in Ruby on Rails?
- 26. Utilizzo di decimali in Ruby on Rails 3
- 27. Formati personalizzati in Ruby on Rails
- 28. Problema di connessione Ruby on rails
- 29. Ruby on rails problems on heroku
- 30. Ruby On Rails Gruppo Mongo per
In Rails sopra 3.1 questo è diventato solo "SecureRandom.hex (50)". – Bulat
Due cose che vale la pena menzionare, solo 10 minuti circa: 1. 'SecureRandom.hex (n)' raddoppia 'n' come lunghezza del carattere nel codice generato (quindi niente oltre 120 o qualsiasi cosa per i tipi di stringa Postgres) 2. Non dimenticare di salvare il modello dopo aver assegnato il valore! (Duh) –