Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

Devise में महारत: Ruby on Rails प्रमाणीकरण के लिए आवश्यक गाइड

20,000 से अधिक GitHub स्टार्स और बहुत सारे एकीकरण के साथ, Devise जेम रूबी परिदृश्य में सबसे लोकप्रिय जेम्स में से एक है। तो हम इसे रूबी के "छिपे हुए" जेम्स में से एक क्यों कहेंगे? खैर, जितना लोकप्रिय यह है, अधिकांश डेवलपर केवल लाइब्रेरी की क्षमताओं की सतह को खरोंचते हैं।

इस दो-भाग श्रृंखला में, हम Devise में गहराई से गोता लगाएंगे।

इस पहले भाग में, हम कुछ मूल बातें सीखेंगे, जिनमें शामिल हैं:

  • Devise क्या है और आपको पहली जगह में इसका उपयोग क्यों करना चाहिए, जिसमें कुछ स्थितियां भी शामिल हैं जहां इसका उपयोग न करना उचित है।
  • Devise को कैसे इंस्टॉल करें और अपने प्रोजेक्ट में उपयोग करें।
  • लाइब्रेरी को अपने प्रोजेक्ट के लिए कैसे अनुकूलित करें।

भाग दो में, हम Devise के अधिक उन्नत उपयोग को देखेंगे, जिनमें शामिल हैं:

  • OmniAuth और API-ओनली एप्लिकेशन के लिए Devise का उपयोग।
  • Devise को प्राधिकरण लाइब्रेरी के साथ एकीकृत करना।

शुरू करते हैं!

पूर्वापेक्षाएँ

इस ट्यूटोरियल में, हम उपयोगकर्ताओं और कार्यों की विशेषता वाले एक साधारण रूबी ऑन रेल्स 7 एप्लिकेशन का उपयोग करेंगे। उपयोगकर्ता पंजीकरण कर सकते हैं, लॉग इन कर सकते हैं, और लॉग आउट कर सकते हैं, उनकी सौंपी गई भूमिका के आधार पर कार्यों के लिए create, read, update, और delete एक्शन तक पहुंच के साथ।

हम इस ऐप का उपयोग उत्तरोत्तर अधिक जटिल सुविधाओं के निर्माण के लिए करेंगे और इस प्रक्रिया में Devise की शक्तिशाली सुविधाओं को कार्रवाई में दिखाएंगे।

आइए Devise के संक्षिप्त परिचय के साथ शुरू करें।

रूबी के लिए Devise का परिचय

Devise Warden के शीर्ष पर बनाया गया एक प्रमाणीकरण लाइब्रेरी है, जो एक Rack-आधारित प्रमाणीकरण फ्रेमवर्क है।

Warden सुरक्षित सत्र स्ट्रिंग्स का उपयोग करके लॉग-इन उपयोगकर्ताओं की पहचान को सत्यापित करके उपयोगकर्ता सत्र को संभालता है। यह उन उपयोगकर्ताओं को भी संभालता है जो लॉग इन नहीं हैं ताकि यह सुनिश्चित किया जा सके कि वे प्रतिबंधित संसाधनों तक नहीं पहुंच सकते।

लेकिन चूंकि Warden विशुद्ध रूप से Rack-आधारित है, यह एक उचित उपयोगकर्ता प्रमाणीकरण समाधान बनाने के लिए आवश्यक कंट्रोलर एक्शन, व्यू, हेल्पर्स, या कोई अन्य कॉन्फ़िगरेशन विकल्प नहीं जोड़ता है। Devise, दूसरी ओर, करता है।

Devise की एक और उल्लेखनीय विशेषता इसकी मॉड्यूलरिटी है। लाइब्रेरी लगभग 10 मॉड्यूल के साथ आती है जो आपको यह निर्दिष्ट करने की अनुमति देती है कि आप अपने एप्लिकेशन में प्रमाणीकरण को कैसे संभालना चाहते हैं। आपको सभी 10 मॉड्यूल का उपयोग करने की आवश्यकता नहीं है। इसके बजाय, आप केवल वही सक्रिय और उपयोग करते हैं जो आपके ऐप के लिए आवश्यक हैं। हम बाद में इन मॉड्यूल पर जाएंगे, जिनमें Registerable मॉड्यूल, Omniauthable, Trackable, और अन्य शामिल हैं।

इसे ध्यान में रखते हुए, आइए अपना Tasks ऐप बनाना शुरू करें और Devise इंस्टॉल करें।

शुरुआत: Devise इंस्टॉल करना

bundle exec rails new tasks_app का उपयोग करके एक नया रेल्स 7 ऐप जेनरेट करें। वैकल्पिक रूप से, बस हमारे उदाहरण ऐप के कोड को रेपो से खींचें।

सुनिश्चित करें कि आप ऐप के रूट डायरेक्टरी में हैं, फिर bundle add devise चलाएं। यह Devise जेम को आपके ऐप के Gemfile में जोड़ देगा। इसके बाद, Devise इंस्टॉल करने और इसकी इनिशियलाइज़र फ़ाइल जेनरेट करने के लिए bundle exec rails g devise:install चलाएं (हम Devise के मॉड्यूल से गुजरते समय इस फ़ाइल पर करीब से नज़र डालेंगे)।

जब आप यह कमांड चलाते हैं, तो जेनरेटर Devise के अपेक्षा के अनुरूप काम करने के लिए कुछ सेटअप सुझाव भी देगा। बस दिए गए निर्देशों का पालन करें, और आप जाने के लिए अच्छे होने चाहिए।

अब, आइए एक उपयोगकर्ता मॉडल जेनरेट करें जिसके साथ Devise काम करेगा।

Devise उपयोगकर्ता मॉडल जेनरेट करना

Devise को एक उपयोगकर्ता मॉडल की आवश्यकता होती है। आप इस मॉडल को क्या कहते हैं यह पूरी तरह से आपकी प्राथमिकताओं और आपके ऐप के उपयोग के मामले पर निर्भर करता है, लेकिन यह आमतौर पर या तो User या Admin होता है।

आगे बढ़ें और bundle exec rails g devise User के साथ एक Devise उपयोगकर्ता मॉडल जेनरेट करें। यह app/models/user.rb के तहत एक User मॉडल, उपयोगकर्ता टेबल बनाने के लिए एक माइग्रेशन फ़ाइल, और उपयोगकर्ता संसाधन तक पहुंचने के लिए एक रूट जेनरेट करेगा:


bundle exec rails db:migrate चलाकर माइग्रेशन चलाएं और उपयोगकर्ता टेबल सेट अप करें। इसके साथ, हमारे पास अब एक उपयोगकर्ता मॉडल है जिसका उपयोग हम सभी प्रमाणीकरण चीजों के लिए कर सकते हैं।

अब, आगे बढ़ने के लिए एक Task मॉडल सेट करते हैं।

Task मॉडल जेनरेट करना

याद रखें, Devise का उपयोग करके, हमारे सरल ऐप को यह करना होगा:

  • उपयोगकर्ता को पंजीकरण करने में सक्षम बनाएं।
  • उपयोगकर्ता को ऐप में साइन इन और आउट करने में सक्षम बनाएं।
  • उपयोगकर्ता को एक Task बनाने में सक्षम बनाएं जो उनसे संबंधित होगा।
  • उपयोगकर्ता को उनकी भूमिका के आधार पर Task के साथ इंटरैक्ट करने की अनुमति दें (या अस्वीकार करें)।

इसे ध्यान में रखते हुए, आइए अब Task मॉडल जेनरेट करें जिसके साथ उपयोगकर्ता इंटरैक्ट करेंगे:


अब हमारे पास एक Task मॉडल होना चाहिए जो इसे बनाने वाले उपयोगकर्ता से जुड़ा हो, एक शीर्षक, एक बॉडी, और एक स्थिति (यह दिखा रहा है कि यह पूरा हुआ है या नहीं)।

उसके बाद, टास्क टेबल बनाने के लिए bundle exec rails db:migrate चलाएं। यह भी सुनिश्चित करें कि आप Task को User से संबंधित करते हैं:


जब आप स्कैफोल्ड जेनरेटर चलाते हैं, तो संबंध belongs_to :users स्वचालित रूप से Task मॉडल में जोड़ दिया जाएगा। फिर भी, स्थिति के लिए enum का उपयोग करने के लिए Task मॉडल को संपादित करें जैसा कि नीचे दिखाया गया है:


इसके साथ, हम अब Devise में गहराई से गोता लगाने के लिए तैयार हैं। आइए Devise के मॉड्यूल के संक्षिप्त अवलोकन से शुरू करें।

रूबी के लिए Devise में मॉड्यूल

जैसा कि हमने परिचय में उल्लेख किया है, Devise की प्रमुख विशेषताओं में से एक इसकी मॉड्यूलरिटी है। लेकिन इस मामले में "मॉड्यूलरिटी" का वास्तव में क्या अर्थ है? इसका सीधा सा मतलब है प्रमाणीकरण प्रक्रिया को विभिन्न भागों में अलग करना ताकि उन्हें स्वतंत्र रूप से प्रबंधित किया जा सके।

लेखन के समय Devise के नवीनतम संस्करण में 10 मॉड्यूल हैं:

  1. डेटाबेस ऑथेंटिकेटेबल - यह मॉड्यूल उपयोगकर्ता-आपूर्ति पासवर्ड लेगा और इसे एक सुरक्षित हैश में परिवर्तित करेगा जिसे फिर डेटाबेस में संग्रहीत किया जाता है। मॉड्यूल यह भी संभालता है जब उपयोगकर्ता साइन इन करता है तो सत्यापन।
  2. Omniauthable - OmniAuth प्रमाणीकरण सक्षम करता है।
  3. Lockable - यह मॉड्यूल विफल लॉगिन की संख्या के आधार पर खाते को लॉक कर देगा। खाते को एक निश्चित समय अवधि के बाद या ईमेल के माध्यम से फिर से सुलभ बनाया जाता है।
  4. Trackable - एक खाते द्वारा किए गए लॉगिन की संख्या, उपयोग किए गए IP पते, और लॉगिन टाइमस्टैम्प को ट्रैक करता है।
  5. Confirmable - खाता पंजीकृत होने पर पुष्टि निर्देशों के साथ एक ईमेल भेजता है और यह भी जांचता है कि उपयोगकर्ता का खाता लॉग इन करते समय पुष्टि किया गया है या नहीं।
  6. Registerable - उपयोगकर्ताओं को आपके ऐप पर खाता पंजीकृत करने की अनुमति देता है, और खाता संपादन और विनाश को संभालता है।
  7. Recoverable - पासवर्ड रीसेट और खाता पुनर्प्राप्ति को संभालता है।
  8. Timeoutable - निर्दिष्ट समय बीत जाने के बाद उपयोगकर्ता सत्र को समाप्त करता है।
  9. Validatable - यह आपको खाता निर्माण के दौरान उपयोगकर्ता-आपूर्ति ईमेल और पासवर्ड के लिए कस्टम मान्यता नियमों को परिभाषित करने देता है।
  10. Rememberable - प्रमाणीकरण के दौरान उपयोगकर्ता को याद रखने के लिए कुकी का उपयोग करता है।

अधिक जानकारी के लिए, Devise का मॉड्यूल पर दस्तावेज़ीकरण आपको अच्छी तरह से सेवा देगा। अब, आइए Devise हेल्पर्स और फिल्टर्स पर स्विच करें।

Devise हेल्पर्स और फिल्टर्स

Devise जैसे प्रमाणीकरण लाइब्रेरी का उपयोग करने के कारणों में से एक कंट्रोलर संसाधनों और संबंधित व्यू तक पहुंच का प्रबंधन करना है। Devise सुविधाजनक हेल्पर्स के एक सेट के साथ लोडेड आता है, जिनमें शामिल हैं:

  • user_signed_in? - जांचता है कि वर्तमान में लॉग-इन उपयोगकर्ता है या नहीं।
  • current_user - आपको वर्तमान में लॉग-इन उपयोगकर्ता को संदर्भित करने की अनुमति देता है। उदाहरण के लिए, आप वर्तमान में लॉग-इन उपयोगकर्ता का ईमेल लाने के लिए current_user.email जैसे कोड स्निपेट का उपयोग कर सकते हैं।
  • user_session - वर्तमान में लॉग-इन उपयोगकर्ता के सत्र के लिए।
  • destroy_user_session_path - लॉग-इन उपयोगकर्ता के सत्र को नष्ट करता है और निर्दिष्ट पथ या रूट पथ पर रीडायरेक्ट करता है।
  • new_user_session_path - उपयोगकर्ता लॉगिन व्यू के साथ प्रतिक्रिया करता है।
  • edit_user_registration_path - वर्तमान में लॉग-इन उपयोगकर्ता को उनके पंजीकरण विवरण संपादित करने के लिए एक व्यू तक पहुंच देता है।
  • new_user_registration_path - नए उपयोगकर्ताओं को पंजीकृत करने के लिए पंजीकरण फॉर्म वाले व्यू के साथ प्रतिक्रिया करता है।

हेल्पर्स के लिए बस इतना ही। कंट्रोलर एक्सेस का प्रबंधन करने के लिए, Devise आपको एक निफ्टी before_action फिल्टर देता है जिसका उपयोग आप इस तरह कर सकते हैं:


इसके साथ, आइए अब इस पर ध्यान केंद्रित करें कि Devise रेल्स के स्ट्रांग पैरामीटर्स के साथ कैसे एकीकृत होता है।

Devise और Ruby on Rails के स्ट्रांग पैरामीटर्स

स्ट्रांग पैरामीटर्स एक प्रसिद्ध रूबी ऑन रेल्स विशेषता है जो अनुरोध पैरामीटर्स के ऑब्जेक्ट्स में मास असाइनमेंट को रोकती है। स्ट्रांग पैरामीटर्स की आवश्यकता है कि किसी भी असाइनमेंट से पहले अनुरोध पैरामीटर्स को स्पष्ट रूप से घोषित किया जाए, आमतौर पर कंट्रोलर स्तर पर।

Devise भी इस कार्यक्षमता को दर्शाता है जिसके लिए Devise-विशिष्ट कंट्रोलर एक्शन के तहत पैरामीटर्स को स्पष्ट रूप से परिभाषित करने की आवश्यकता होती है:

  • sign_up - डिफ़ॉल्ट रूप से, यह Devise कंट्रोलर Devise::RegistrationsController#create में पाया जाता है। डिफ़ॉल्ट रूप से अनुमत कुंजियाँ email, password, और password_confirmation हैं।
  • sign_in - यह कंट्रोलर Devise::SessionsController#new में पाया जाता है, डिफ़ॉल्ट अनुमत प्रमाणीकरण कुंजियों email और password के साथ।
  • account_update - Devise::Registrations#update में पाया जाता है — प्रमाणीकरण कुंजियाँ email, current_password, password, और password_confirmation अनुमत हैं।

अपनी खुद की प्रमाणीकरण कुंजियों को जोड़ने का सबसे सुविधाजनक तरीका ApplicationController में before_action फिल्टर का उपयोग करना है, जैसे यहां, जहां हम username कुंजी जोड़ते हैं जो उपयोगकर्ता साइन अप करते समय आवश्यक होती है:


Devise के स्ट्रांग पैरामीटर्स के लिए एक दिलचस्प उपयोग का मामला तब होता है जब आपको Devise सैनिटाइज़र को कुंजियों की एक सरणी पास करने की आवश्यकता होती है। उदाहरण के लिए, मान लें कि हमारे पास एक फ्रीलांसर मार्केटप्लेस ऐप है जहां एक उपयोगकर्ता हायर के लिए "कॉन्ट्रैक्टर" हो सकता है, या एक "नियोक्ता" जो अन्य कॉन्ट्रैक्टर्स को हायर कर सकता है, या एक ही समय में कॉन्ट्रैक्टर और नियोक्ता दोनों।

बहुत अधिक तकनीकी विवरण में जाए बिना, हम उपयोगकर्ताओं को उनके खाते को क्रमशः "कॉन्ट्रैक्टर" और "नियोक्ता" भूमिकाओं के लिए दो सेलेक्ट बॉक्स का उपयोग करके अपडेट करने की अनुमति देकर इस कार्यक्षमता को प्राप्त कर सकते हैं — ताकि उपयोगकर्ता या तो या दोनों विकल्प चुन सके।

इसे प्राप्त करने का एक त्वरित तरीका भूमिकाओं को कुंजियों के रूप में एक सरणी का उपयोग करना है, लेकिन रेल्स के स्ट्रांग पैरामीटर्स केवल निम्नलिखित स्केलर मानों की अनुमति देते हैं: String, Symbol, NilClass, Numeric, TrueClass, FalseClass, Date, Time, DateTime, StringIO, IO, ActionDispatch::Http::UploadedFile, और Rack::Test::UploadedFile। जैसा कि आप देख सकते हैं, सरणियाँ, हैश, और अन्य ऑब्जेक्ट्स, डिफ़ॉल्ट रूप से, अनुमत नहीं हैं।

हमारे उपयोगकर्ता के लिए कई भूमिकाओं की अनुमति देने वाली सरणी का उपयोग करने के लिए, हम अपने कोड को नीचे दिखाए अनुसार संशोधित कर सकते हैं:


Devise का हेल्पर्स पर दस्तावेज़ीकरण इस विषय को अधिक विस्तार से कवर करता है।

अब, आइए सीखें कि Devise के व्यू और कंट्रोलर को कैसे अनुकूलित किया जाए।

Devise व्यू को अनुकूलित करना

क्योंकि Devise एक रेल्स इंजन के रूप में बनाया गया है, इसके लगभग सभी घटक पूर्व-पैकेज्ड हैं। अच्छे उदाहरणों में लॉग इन करने, साइन अप करने, खाता विवरण अपडेट करने, अपना पासवर्ड रीसेट करने आदि के लिए व्यू शामिल हैं। आपके ऐप बनाने की यात्रा में किसी बिंदु पर, आपको इन बिल्ट-इन व्यू को अपनी आवश्यकताओं के अनुरूप अनुकूलित करने की आवश्यकता हो सकती है।

पहला कदम bundle exec rails g devise:views कमांड का उपयोग करके व्यू जेनरेट करना है। जब आप ऐसा करते हैं, तो संबंधित व्यू जेनरेट होते हैं और app/views/devise फोल्डर में रखे जाते हैं:

Devise में महारत: Ruby on Rails प्रमाणीकरण के लिए आवश्यक गाइड

Devise के व्यू को अनुकूलित करने के एक व्यावहारिक उदाहरण का उपयोग करें। पिछले खंड में, हमने Devise सैनिटाइज़र में अतिरिक्त प्रमाणीकरण कुंजियों को जोड़ना सीखा। आइए अब उस उदाहरण को उपयोगकर्ता पंजीकरण व्यू में username फ़ील्ड जोड़कर बढ़ाएं।

चूंकि username फ़ील्ड हमारे डिफ़ॉल्ट उपयोगकर्ता मॉडल के लिए उपलब्ध नहीं है, हम bundle exec rails g migration add_column_username_to_user username माइग्रेशन का उपयोग करके इसे जोड़ेंगे। bundle exec rails db:migrate कमांड चलाकर माइग्रेशन शुरू करें और उपयोगकर्ता टेबल में कॉलम जोड़ें।

इसके बाद, नई उपयोगकर्ता पंजीकरण फ़ाइल खोलें और इसे निम्नानुसार संपादित करें:


इस तरह Devise व्यू जेनरेट करना ठीक है यदि आप सभी व्यू के साथ काम कर रहे हैं। लेकिन मान लें कि आप केवल कुछ व्यू को अनुकूलित करना चाहते हैं। आप यह कैसे कर सकते हैं? खैर, आप बस जेनरेटर कमांड को उन व्यू की सूची पास करते हैं जिन्हें आप व्यू फ्लैग bundle exec rails g devise:views -v sessions registrations का संकेत देकर चाहते हैं। इस मामले में, यह केवल लॉगिन/लॉगआउट प्रक्रिया से जुड़े व्यू और साइन-अप को संभालने वाले व्यू जेनरेट करता है।

आगे बढ़ते हुए, आइए Devise के कंट्रोलर और रूट्स को अनुकूलित करना सीखकर Devise अनुकूलन में और गहराई से जाएं।

Devise कंट्रोलर और रूट्स को अनुकूलित करना

Devise के व्यू को अनुकूलित करना केवल आपको इतना आगे ले जा सकता है। यदि आप वास्तविक अनुकूलन चाहते हैं, तो आपको लाइब्रेरी के कंट्रोलर और रूट्स में जाने की आवश्यकता है।

मान लें कि हम ऐप पर हर नए उपयोगकर्ता पंजीकरण पर अपने एडमिन को सूचित करने वाला एक ईमेल भेजना चाहते हैं। (यह चीजों के बारे में जाने का आदर्श तरीका नहीं है, लेकिन आइए इसे उस उदाहरण के साथ चलाएं जिसे हम चित्रित करना चाहते हैं)।

शुरुआत करने के लिए, हमें Devise::RegistrationsController के साइनअप एक्शन को संशोधित करने की आवश्यकता है। आमतौर पर, Devise के कंट्रोलर सीधे संपादन के लिए सुलभ नहीं हैं, इसलिए, जैसे हमने व्यू के साथ किया था, हम उन्हें इस तरह जेनरेट कर सकते हैं:


उस कमांड का अंतिम भाग स्कोप है - इस मामले में, users। यदि आप इसे कुछ और चाहते हैं, तो आप इसे तदनुसार बदल सकते हैं। जब आप पूरा कर लेते हैं, तो जेनरेट किए गए कंट्रोलर को इस तरह की संरचना में होना चाहिए:

Devise में महारत: Ruby on Rails प्रमाणीकरण के लिए आवश्यक गाइड

अब रूट्स फ़ाइल खोलें और Devise के रूट्स को कंट्रोलर संरचना में परिवर्तनों को प्रतिबिंबित करने के लिए संशोधित करें:


अब नए जेनरेट किए गए Users::RegistrationsController को खोलें और इसे ऐप पर हर नए उपयोगकर्ता साइन अप पर एडमिन को ईमेल भेजने के लिए संशोधित करें:


जैसा कि आप देख सकते हैं, Devise के कंट्रोलर और एक्शन तक पहुंच के साथ, आप अपने ऐप के प्रमाणीकरण प्रवाह को किसी भी तरह से संशोधित कर सकते हैं।

अगला: Devise का उन्नत उपयोग

इस दो-भाग श्रृंखला के पहले भाग में, हमने Devise जेम की मूल बातें कवर कीं। हमने Devise के विभिन्न मॉड्यूल के बारे में सीखा, साथ ही इसके व्यू और कंट्रोलर को कैसे अनुकूलित किया जाए।

भाग दो में, हम Devise के अधिक उन्नत उपयोग में गोता लगाएंगे, जिसमें API प्रमाणीकरण और Devise के साथ OmniAuth का उपयोग कैसे करें शामिल है।

तब तक, हैप्पी कोडिंग!

P.S. यदि आप Ruby Magic पोस्ट को प्रेस से निकलते ही पढ़ना चाहते हैं, तो हमारे Ruby Magic न्यूज़लेटर की सदस्यता लें और कभी भी एक भी पोस्ट न चूकें!


  1. Chrome में JavaScript फ़ंक्शन परिभाषा कैसे खोजें? Chrome में JavaScript फ़ंक्शन परिभाषा कैसे खोजें?

    Google Chrome में JavaScript फ़ंक्शन परिभाषा खोजने के लिए, वेब ब्राउज़र खोलें और डेवलपर टूल्स तक पहुंचने के लिए F12 दबाएं: अब Ctrl + Shift + F दबाएं नियमित अभिव्यक्ति जांचें जैसा कि नीचे दिखाया गया है: फ़ंक्शन खोजें और बस।

  1. C++ का उपयोग करके एक सेट पर रिफ्लेक्सिव रिलेशंस की संख्या ज्ञात करें C++ का उपयोग करके एक सेट पर रिफ्लेक्सिव रिलेशंस की संख्या ज्ञात करें

    इस लेख में, हम एक सेट पर रिफ्लेक्सिव रिलेशंस की संख्या ज्ञात करने के दृष्टिकोणों की व्याख्या करेंगे। इस समस्या में, हमें संख्या n दी गई है, और n प्राकृतिक संख्याओं के एक सेट पर, हमें रिफ्लेक्सिव रिलेशंस की संख्या निर्धारित करनी है।रिफ्लेक्सिव रिलेशन - एक सेट A में एक रिलेशन को रिफ्लेक्सिव कहा जाता ह

  1. C++ में ऐरे में सभी अभाज्य संख्याओं का गुणनफल C++ में ऐरे में सभी अभाज्य संख्याओं का गुणनफल

    कुछ एलिमेंट्स के साथ एक इंटीजर ऐरे arr[] दिया गया है, कार्य उस ऐरे की सभी अभाज्य संख्याओं का गुणनफल निकालना है। अभाज्य संख्याएं वे संख्याएं होती हैं जो या तो 1 से विभाज्य होती हैं या स्वयं संख्या से, या एक अभाज्य संख्या वह संख्या है जो 1 और स्वयं संख्या को छोड़कर किसी अन्य संख्या से विभाज्य नहीं ह