movidic mobidic llamadme libro lectura ismael ruby guid

ruby - mobidic - llamadme ismael



Generando Guids en Ruby (9)

Cuando utilicé las gemas uuid recomendadas en esta pregunta, nadie puede generar UUID únicos y aleatorios. Mi respuesta es una alternativa, si tenemos gema más tarde para satisfacer la solicitud, será mejor que utilices la gema en Ruby.

Intento la mayoría de las gemas de uuid recomendadas en esta pregunta, pero nadie me satisface, necesitamos un uuid único y aleatorio. uuidgen directamente el comando del sistema uuidgen en ruby, y me gusta el resultado, y lo comparto aquí.

puts `uuidgen` 8adea17d-b918-43e0-b82f-f81b3029f688 puts `uuidgen` 6a4adcce-8f64-41eb-bd7e-e65ee6d11231 puts `uuidgen` 51d5348b-8fc3-4c44-a6f7-9a8588d7f08a puts `uuidgen` 332a0fa3-7b07-41e1-9fc8-ef804a377e4e

si se compara con uuid joya, sabrá la diferencia.

irb(main):003:0> uuid.generate => "40cdf890-ebf5-0132-2250-20c9d088be77" irb(main):004:0> uuid.generate => "4161ac40-ebf5-0132-2250-20c9d088be77"

El entorno de prueba es el entorno de Linux y Mac OS.

Tengo un problema que se soluciona fácilmente con Guids.

En particular, para un flujo de trabajo de restablecimiento de contraseña, me gustaría enviar un token Guid al correo electrónico de un usuario y hacer que restablezcan su contraseña usando el token. Como las guids son únicas, esto es bastante seguro y me ahorra contraseñas de personas por correo electrónico, lo cual es arriesgado.

Noté que hay una joya Guid para Ruby; pero parece bastante viejo, y escribe cosas en el sistema de archivos.

¿Alguien sabe de alguna otra gema que pueda crear un identificador global único?

Sé que puedo recurrir a:

(0..16).to_a.map{|a| rand(16).to_s(16)}.join

Pero realmente no parece un GUID apropiado ...


¿ UUIDTools ?

UUIDTools fue diseñado para ser una biblioteca simple para generar cualquiera de los diversos tipos de UUID (o GUID si prefiere llamarlos así). Cumple con RFC 4122 siempre que sea posible.


A partir de Ruby 1.9, la generación de uuid está incorporada. Use la función SecureRandom.uuid .

Por ejemplo:

require ''securerandom'' SecureRandom.uuid # => "96b0a57c-d9ae-453f-b56f-3b154eb10cda"



Mientras programaba a altas horas de la noche, se me ocurrió la siguiente solución (basada en la de Simone) para generar un GUID único en Rails. No estoy orgulloso de ello, pero funciona bastante bien.

while Order.find_by_guid(guid = rand(36**8).to_s(36).upcase).present?; end


Para crear un GUID apropiado, mysql, varchar 32

SecureRandom.uuid.gsub(''-'','''').upcase


Pequeña actualización de la respuesta de Simone Carletti:

SecureRandom.base64 (8) .gsub ("/", "_"). Gsub (/ = + $ /, "")

=> "AEWQyovNFo0"

puede ser reemplazado por:

SecureRandom.urlsafe_base64 (8)


Usamos UUIDTools y no tenemos problemas con eso.


Cómo crear tokens pequeños y únicos en Ruby

>> require ''digest'' => [] >> Digest::SHA1.hexdigest("some-random-string")[8..16] => "2ebe5597f" >> SecureRandom.base64(8).gsub("/","_").gsub(/=+$/,"") => "AEWQyovNFo0" >> rand(36**8).to_s(36) => "uur0cj2h"