রুবিতে গাইড তৈরি করা


142

আমার এমন সমস্যা আছে যা গাইডগুলির সাথে খুব সহজেই সমাধান হয়ে যায়।

বিশেষত, পাসওয়ার্ড পুনরায় সেট করার কর্মপ্রবাহের জন্য, আমি কোনও ব্যবহারকারীর ইমেলটিতে একটি গাইড টোকেন প্রেরণ করতে চাই এবং টোকেন ব্যবহার করে তাদের পাসওয়ার্ডটি পুনরায় সেট করতে চাই। গাইডগুলি যেহেতু অনন্য, তাই এটি বেশ সুরক্ষিত এবং আমাকে লোকেদের পাসওয়ার্ডগুলি ইমেল করা বাঁচায় যা ঝুঁকিপূর্ণ।

আমি লক্ষ্য করেছি যে রুবির জন্য একটি গাইড রত্ন রয়েছে ; তবে এটি বেশ পুরানো দেখাচ্ছে, এবং এটি ফাইল সিস্টেমে স্টাফ লেখায়।

বিশ্বব্যাপী অনন্য সনাক্তকারী তৈরি করতে পারে এমন কোনও রত্ন সম্পর্কে কি কেউ জানেন?

আমি জানি আমি কেবল এখানে ফিরে যেতে পারি:

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

তবে এটি যথাযথ জিইউইডি বলে মনে হচ্ছে না ...


1
এর মতো এলোমেলো স্ট্রিং ব্যবহার করা ঠিক ঠিক হবে না; ইউইউডি-র কিছু বিট বৈকল্পিক এবং সংস্করণ নির্দিষ্ট করে। একটি এলোমেলো ইউআইইডের জন্য, আপনি সম্ভবত বৈকল্পিক 2 (আরএফসি 4122) এবং সংস্করণ 4 চান, সেক্ষেত্রে 6 নির্দিষ্ট বিটকে সঠিক মানগুলিতে সেট করা আবশ্যক।
jtpereyda

1
হ্যাঁ @ ড্যাফরাজ্জামান ঠিক বলেছেন। এলোমেলোভাবে কিছু এমনভাবে পাইক করা যা "ইউআইডির সাথে সাদৃশ্যপূর্ণ" স্বতন্ত্রতার গ্যারান্টি দেয় না। যদিও কোনও ইউইউডি সত্যই গ্যারান্টিযুক্ত নয়, এলোমেলো সংখ্যার সাথে একটি তৈরি করা সংঘর্ষের চেয়ে বেশি সংবেদনশীল এবং "ইউইউডি" লেবেলের যোগ্য হতে পারে না। অবশ্যই SecureRandom.uuid দিয়ে যান!
ডোলিও

উত্তর:


312

রুবি ১.৯ হিসাবে, ইউইড প্রজন্ম অন্তর্নির্মিত। SecureRandom.uuidফাংশনটি ব্যবহার করুন ।

উদাহরণ স্বরূপ:

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

5
SecureRandom.uuid একটি র্যান্ডম ইউআইডি উত্পন্ন করে, তাই এটি অনন্য হিসাবে গ্যারান্টিযুক্ত নয়। যদি আপনি কেবল একটি র্যান্ডম স্ট্রিং চান যা সম্ভবত অনন্য তবে এটি ব্যবহার করা ঠিক হবে। যাইহোক, আপনি যদি এমন কিছু চান যা গ্যারান্টিযুক্ত অনন্য হ'ল আপনাকে অবশ্যই এমন কিছু ব্যবহার করতে হবে যার মধ্যে ম্যাক ঠিকানা, টাইমস্ট্যাম্প এবং এটি সিটেরা রয়েছে।
মাইক ডটারার

23
আপনাকে কিছুটা দেখার জন্য, আপনার প্রয়োজন হবে 'সিকিওরেন্ড্যান্ডম'
জেসি শিহ

8
এটি অনন্য হওয়ার গ্যারান্টিযুক্ত নয়, তবে বেশিরভাগ ব্যবহারিক উদ্দেশ্যে, এটি অনন্য বলে ধরে নেওয়া নিরাপদ। দেখুন: স্ট্যাকওভারফ্লো.
com/ প্রশ্নগুলি

ডকুমেন্টেশন অনুসারে যদি SecureRandom.uuid আরএফসি 4122 অনুসরণ করে, তার মানে কি এটির টাইমস্ট্যাম্প ক্ষেত্র নেই? একচেটিয়া ব্যতীত, এর অর্থ কি অনন্য নয়?
মাইকেল কে ম্যাডিসন

@ মিশেল কেম্যাডিসন এএফাইক রুবি আরএফসি 4122 এর "ভি 4" রূপটি ব্যবহার করে, যা টাইমস্ট্যাম্প ব্যবহার করে না, সুতরাং সংঘর্ষের সম্ভাবনাটি আসলে শূন্য নয় - তবে বাস্তবে এটিও হতে পারে
এড মরগান


35

আমরা ইউআইডিটিউলগুলি ব্যবহার করি এবং এটিতে কোনও সমস্যা নেই।


2
সিস্টেমের কোনও ম্যাক ঠিকানা না থাকলেও 'uuidtools' কাজ করে। এই ক্ষেত্রে 'uuid' ব্যর্থ হয়।
গ্রেফ্যাব

3
ইউইড রত্নের বিপরীতে, uuidtools কোনও স্টেট ফাইল রাখে না। রাষ্ট্র ফাইলের অনুমতি সংক্রান্ত সমস্যাগুলি ইউইউইড রত্নকে একাধিক ব্যবহারকারীর সাথে ব্যবহার করতে কিছুটা বিশ্রী করে তোলে।
ওয়েইন কনরাড

1
দেখা যাচ্ছে যে ইউআইডি সরঞ্জামগুলি আর রক্ষণাবেক্ষণ করা হচ্ছে না। 2 বছরেরও বেশি সময় ধরে গিথুব রেপোতে কোনও অঙ্গীকার হয়নি
সুধাংশু মিশ্র

22

আপনি কি ইউইউডিটিউলগুলিতে দেখেছেন ?

ইউআইডিটিউলগুলি বিভিন্ন ধরণের ইউইউডি (বা আপনি যদি তাদের এটিকে কল করতে পছন্দ করেন তবে জিইউইডি) তৈরির জন্য একটি সাধারণ গ্রন্থাগার হিসাবে নকশাকৃত হয়েছিল। এটি যখনই সম্ভব আরএফসি 4122 এর সাথে সামঞ্জস্য করে।


16

গুগল নিম্নলিখিত রুবি লাইব্রেরি উত্পাদন করে:

http://raa.ruby-lang.org/project/ruby-guid/

এছাড়াও, http://www.ruby-forum.com/topic/99262 এ তারা বলেছে যে আপনি একটি রত্ন ইনস্টল করতে পারেন ( gem uuidএটি ইনস্টল করতে কমান্ড লাইনে চালিত করতে পারেন) এবং তারপরে

gem 'uuid'
puts UUID.new

আপনার কোডে একটি নতুন ইউআইডি দেখতে।

(ইঙ্গিত: আমি গাইড রুবির জন্য গুগলড )


thx আমি এটি দেখেছি কিন্তু এটি অতি পুরানো, সাম্প্রতিক রত্নের মতো সক্রিয় কিছু সন্ধান করছে?
ল্যান্স পোলার্ড

আমি কীভাবে আমার উত্তরটিতে যুক্ত করেছি? নাকি আপনি যার সাথে উল্লেখ করছেন?
মার্ক ডাব্লু

5
এটি অদ্ভুত ... আমি "গাইড রুবি" কেও গুগল করেছিলাম, এবং আমার যা কিছু পেয়েছিল তা এই এসও পোস্টটি ছিল :
জেসন হোয়াইটহর্ন


3

সাইমন কারলেটির উত্তরটির জন্য ছোট্ট আপডেট:

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

=> "AEWQyovNFo0"

এর সাথে প্রতিস্থাপন করা যেতে পারে:

SecureRandom.urlsafe_base64 (8)


1

গভীর রাতে প্রোগ্রামিং করার সময় আমি রেলগুলিতে একটি অনন্য জিইউইডি উত্পাদন করার জন্য নিম্নলিখিত সমাধানটি (সিমোন এর ভিত্তিতে) নিয়ে এসেছি। আমি এটি নিয়ে গর্বিত না তবে এটি বেশ ভালভাবে কাজ করে।

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

2
আমি আশা করি আপনি সেই রাতে আপনার গাইড কলামটি সূচকে স্মরণ করে রেখেছেন
নুরেটিন

0

আমি যখন এই প্রশ্নে প্রস্তাবিত ইউইড রত্নগুলি ব্যবহার করি তখন কেউ অনন্য এবং এলোমেলো ইউআইডি উত্পন্ন করতে পারে না। আমার উত্তরটি প্রায় কাজ, যদি অনুরোধটি মেটানোর জন্য আমাদের পরে রত্ন থাকে তবে আপনি রুবিতে রত্ন ব্যবহার করা ভাল।

আমি এই প্রশ্নের মধ্যে সবচেয়ে প্রস্তাবিত uuid রত্ন চেষ্টা, কিন্তু কেউ আমাকে সন্তুষ্ট না, আমাদের অনন্য এবং এলোমেলো uuid প্রয়োজন। আমি uuidgenরুবিতে সরাসরি সিস্টেম কমান্ড চালাচ্ছি এবং ফলাফলটি আমি পছন্দ করি এবং এখানে ভাগ করে নিই।

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

যদি uuidরত্নের সাথে তুলনা করা হয় তবে আপনি পার্থক্যটি জানতে পারবেন।

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

পরীক্ষার পরিবেশ হ'ল লিনাক্স এবং ম্যাক ওএস পরিবেশ।


2
একটি puts `...`মূলত একটি সিস্টেম কল করছে uuidgen(3)যা লিনাক্স ব্যতীত অন্য কোনও প্ল্যাটফর্মে ব্যর্থ হয়, প্রচুর পরিমাণে মৃত্যুদন্ড কার্যকর করার সময় যোগ করে এবং সাধারণভাবে সত্যিকারের স্বজ্ঞাত কোডিং অনুশীলনকে প্রতিহত করে। আপনি কেন এই জাতীয় পদ্ধতি পছন্দ করবেন?
ডুইট স্পেন্সার

1
@ ডুইটস্পেন্সার আমি মনে করি আমরা বিভিন্ন উদ্দেশ্যে বিভিন্ন উদ্দেশ্য নিয়ে আছি। আপনি যা যত্নশীল তা আমার উদ্বেগের মধ্যে মোটেই নেই, যেমন এক্সিকিউটিভ সময়, অপারেশন সিস্টেমের বিস্তৃত পরিসর, কোড মাইগ্রেশন। আমি যত্ন করি কোডটি ম্যাক ওএস বা মূল স্ট্রিম লিনাক্সে কাজ করতে পারে এবং আমার প্রয়োজনীয় ফলাফল পেতে পারে। কউসের বিষয়ে, আপনি যদি রুবিতে কোনও উপায় তৈরি করতে পারেন এবং ইউইডজেন কমান্ডের মতো একই ফলাফল পেতে পারেন তবে আমি এটি ব্যবহার করে খুশি। তবে এখন অবধি আমি কিছু পাইনি।
BMW

1
@ জে_ এবং @ সিমোন-কার্লেটি উভয়ই ইতিমধ্যে এই পোস্টে একটি আরও ভাল উপায় নির্দেশ করেছেন। আমি একজনকে SecureRandomএকই পদ্ধতিতে একই ফাংশনটির পূর্বরূপ হিসাবে প্রস্তাব দিচ্ছি তবে ব্লকিং / দেব / এলোমেলো ব্যবহারের uuidgenবিপরীতে uuidgenকেবল SecureRandomওপেনএসএল এর লাইব্রেরি ব্যবহার করা হয় প্রথমে তারপর ডিভ / ইউরানডামে নেমে শেষে অবশেষে / দেব / এলোমেলো করার চেষ্টা করা হয় in অ রোধ র্যান্ডমাইজেশন জেনারেশন।
ডুইট স্পেন্সার

0

এটি জাভা স্ক্রিপ্ট থেকে শিখেছি একটি নেট কৌশল:

def uuid
    "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".gsub("x") do
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"[rand(36)]
    end
end

যদিও আরও 'রুবি উপায়' এর মাধ্যমে কেউ এটি করতে পারে:

def uuid
    "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".gsub("x") do
        rand(16).to_s(16)
    end
end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.