Saya memiliki masalah yang sangat mudah diselesaikan dengan Panduan.
Khususnya, untuk alur kerja pengaturan ulang kata sandi, saya ingin mengirim token Guid ke email pengguna dan meminta mereka mengatur ulang kata sandi mereka menggunakan token. Karena petunjuk unik, ini cukup aman dan menyelamatkan saya mengirim email kata sandi orang, yang berisiko.
Saya perhatikan ada satu permata Guid untuk Ruby; tetapi terlihat cukup tua, dan ia menulis hal-hal ke sistem file.
Adakah yang tahu tentang permata lain yang dapat membuat pengidentifikasi unik secara global?
Saya tahu saya bisa kembali ke:
(0..16).to_a.map{|a| rand(16).to_s(16)}.join
Tapi itu tidak benar-benar tampak seperti GUID yang tepat ...
Jawaban:
Pada Ruby 1.9, generasi uuid sudah terintegrasi. Gunakan
SecureRandom.uuid
fungsinya.Sebagai contoh:
sumber
Cara membuat token kecil dan unik di Ruby
sumber
Kami menggunakan UUIDTools dan tidak memiliki masalah dengannya.
sumber
Apakah Anda melihat UUIDTools ?
sumber
Google menghasilkan pustaka Ruby berikut:
http://raa.ruby-lang.org/project/ruby-guid/
Juga, di http://www.ruby-forum.com/topic/99262 mereka mengatakan Anda dapat menginstal permata (jalankan
gem uuid
pada baris perintah untuk menginstalnya) dan kemudian lakukandalam kode Anda untuk melihat UUID baru.
(Petunjuk: I Googled untuk ruby panduan )
sumber
Untuk membuat yang benar, mysql, varchar 32 GUID
sumber
SecureRandom.hex.upcase
Pembaruan kecil untuk jawaban Simone Carletti:
dapat diganti dengan:
sumber
Saat pemrograman larut malam saya datang dengan solusi berikut (berdasarkan dari Simone) untuk menghasilkan GUID unik di Rails. Saya tidak bangga akan hal itu tetapi itu bekerja dengan cukup baik.
sumber
Saya mencoba permata uuid yang paling direkomendasikan dalam pertanyaan ini, tetapi tidak ada yang membuat saya puas, kita perlu uuid unik dan acak. Saya langsung menjalankan perintah sistem
uuidgen
di ruby, dan saya suka hasilnya, dan berbagi di sini.jika dibandingkan dengan
uuid
permata, Anda akan tahu bedanya.Lingkungan pengujian adalah lingkungan linux dan Mac OS.
sumber
puts `...`
pada dasarnya melakukan panggilan sistemuuidgen(3)
yang gagal pada platform lain selain Linux, menambah jumlah waktu eksekusi yang ekstrem, dan secara umum benar-benar bertentangan dengan praktik pengkodean intuitif. Mengapa Anda memilih metode seperti itu?SecureRandom
karena yang membentuk fungsi yang sama dalam metode yang sama sepertiuuidgen
tetapi tidak sepertiuuidgen
penggunaan pemblokiran / dev / acak hanyaSecureRandom
menggunakan perpustakaan openssl pertama kemudian turun ke dev / urandom kemudian akhirnya / dev / acak dalam upaya untuk melakukan generasi pengacakan tidak menghalangi.Ini adalah teknik neet yang saya pelajari dari JavaScript:
Meskipun dengan cara yang lebih 'ruby' seseorang juga bisa melakukannya:
sumber