Tengo un problema que realmente se resuelve 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 utilizando el token. Como las guías son únicas, esto es bastante seguro y me ahorra el envío de contraseñas por correo electrónico, lo cual es riesgoso.
Noté que hay una gema 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 único globalmente?
Sé que puedo recurrir a:
(0..16).to_a.map{|a| rand(16).to_s(16)}.join
Pero en realidad no parece un GUID adecuado ...
Respuestas:
A partir de Ruby 1.9, la generación de uuid está integrada. Usa la
SecureRandom.uuid
función.Por ejemplo:
fuente
Cómo crear tokens pequeños y únicos en Ruby
fuente
Usamos UUIDTools y no tenemos problemas con él.
fuente
¿ Viste UUIDTools ?
fuente
Google produce la siguiente biblioteca de Ruby:
http://raa.ruby-lang.org/project/ruby-guid/
Además, en http://www.ruby-forum.com/topic/99262 dicen que puede instalar una gema (ejecutar
gem uuid
en la línea de comando para instalarla) y luego haceren su código para ver un nuevo UUID.
(Sugerencia: busqué en Google para guid ruby )
fuente
Para crear un GUID apropiado, mysql, varchar 32
fuente
SecureRandom.hex.upcase
Pequeña actualización de la respuesta de Simone Carletti:
se puede reemplazar con:
fuente
Mientras programaba a altas horas de la noche, se me ocurrió la siguiente solución (basada en Simone) para generar un GUID único en Rails. No estoy orgulloso de ello, pero funciona bastante bien.
fuente
Intento las gemas de líquido más recomendadas en esta pregunta, pero nadie me satisface, necesitamos un líquido único y aleatorio. Ejecuto directamente el comando del sistema
uuidgen
en ruby, y me gusta el resultado, y comparto aquí.Si se compara con la
uuid
gema, sabrá la diferencia.El entorno de prueba es el entorno de Linux y Mac OS.
fuente
puts `...`
está haciendo básicamente una llamada al sistema parauuidgen(3)
que falle en cualquier otra plataforma que no sea Linux, añade cantidades extremas de tiempo de ejecución, y en general es una práctica muy contrario a la intuición de codificación. ¿Por qué elegirías tal método?SecureRandom
que está realizando la misma función en el mismo método,uuidgen
pero a diferenciauuidgen
del uso del bloqueo / dev / random soloSecureRandom
usa la biblioteca de openssl primero, luego cae a dev / urandom y finalmente / dev / random en los intentos de hacer generación de aleatorización sin bloqueo.Esta es una técnica neet que aprendí de JavaScript:
Aunque de una manera más 'rubí' también se podría hacer:
fuente