- डिवाइस क्या है और आपको इसका उपयोग सबसे पहले क्यों करना चाहिए, जिसमें कुछ स्थितियाँ भी शामिल हैं जहाँ इसकी सलाह दी जाती हैनहीं इसका उपयोग करने के लिए.
- डिवाइस को कैसे स्थापित करें और इसे अपने प्रोजेक्ट में कैसे उपयोग करें।
- अपने प्रोजेक्ट के लिए लाइब्रेरी को कैसे अनुकूलित करें।
- OmniAuth और API-केवल अनुप्रयोगों के लिए डेविस का उपयोग करना।
- डिवाइस को प्राधिकरण लाइब्रेरी के साथ एकीकृत करना।
पूर्वावश्यकताएँ
<पी> इस ट्यूटोरियल में, हम उपयोगकर्ताओं और कार्यों को दर्शाने वाले एक सरल रूबी ऑन रेल्स 7 एप्लिकेशन का उपयोग करेंगे। उपयोगकर्ताcreate तक पहुंच के साथ पंजीकरण, लॉग इन और लॉग आउट कर सकते हैं , read , update , और delete उनकी सौंपी गई भूमिका के आधार पर कार्यों के लिए कार्रवाई। <पी> हम इस ऐप का उपयोग उत्तरोत्तर अधिक जटिल सुविधाओं का निर्माण करने के लिए करेंगे और इस प्रक्रिया में, डिवाइसेस की शक्तिशाली सुविधाओं को क्रियान्वित करके दिखाएंगे। <पी> आइए डेविस के संक्षिप्त परिचय के साथ शुरुआत करें। रूबी के लिए डिवाइस का परिचय
<पी> डेविस एक प्रमाणीकरण लाइब्रेरी है जो रैक-आधारित प्रमाणीकरण ढांचे, वार्डन के शीर्ष पर बनाई गई है। <पी> लॉग-इन उपयोगकर्ताओं की पहचान सत्यापित करने के लिए वार्डन सुरक्षित सत्र स्ट्रिंग्स का उपयोग करके उपयोगकर्ता सत्रों को संभालता है। यह उन उपयोगकर्ताओं को भी संभालता है जो नहीं हैं यह सुनिश्चित करने के लिए लॉग इन करें कि वे प्रतिबंधित संसाधनों तक नहीं पहुंच सकते। <पी> लेकिन चूंकि वार्डन पूरी तरह से रैक-आधारित है, इसलिए यह उचित उपयोगकर्ता प्रमाणीकरण समाधान बनाने के लिए आवश्यक नियंत्रक क्रियाएं, दृश्य, सहायक या कोई अन्य कॉन्फ़िगरेशन विकल्प नहीं जोड़ता है। दूसरी ओर, डेविस करता है। <पी> डेविस की एक और उल्लेखनीय विशेषता इसकी मॉड्यूलरिटी है। लाइब्रेरी लगभग 10 मॉड्यूल के साथ आती है जो आपको यह निर्दिष्ट करने की अनुमति देती है कि आप अपने एप्लिकेशन में प्रमाणीकरण कैसे प्रबंधित करना चाहते हैं। आपको सभी 10 मॉड्यूल का उपयोग करने की आवश्यकता नहीं है। इसके बजाय, आप सक्रिय करते हैं और केवल वही उपयोग करते हैं जो आपको अपने ऐप के लिए चाहिए। हम बाद में इन मॉड्यूल पर विचार करेंगे, जिसमेंRegisterable शामिल है मॉड्यूल, Omniauthable , Trackable , और अन्य. <पी> इसे ध्यान में रखते हुए, आइए अपना टास्क ऐप बनाना शुरू करें और डेविस इंस्टॉल करें। आरंभ करना:डिवाइस स्थापित करना
<पी>bundle exec rails new tasks_app का उपयोग करके एक नया रेल्स 7 ऐप बनाएं . वैकल्पिक रूप से, बस हमारे उदाहरण ऐप का कोड रेपो से खींचें। <पी> सुनिश्चित करें कि आप ऐप की रूट डायरेक्टरी में हैं, फिर bundle add devise चलाएँ . यह आपके ऐप के जेमफ़ाइल में डेविस रत्न जोड़ देगा। इसके बाद bundle exec rails g devise:install चलाएँ डेविस को स्थापित करने और इसकी इनिशियलाइज़र फ़ाइल तैयार करने के लिए (जब हम डेविस के मॉड्यूल से गुजरेंगे तो हम इस फ़ाइल पर करीब से नज़र डालेंगे)। <पी> जब आप यह कमांड चलाते हैं, तो जेनरेटर आपको डेविस को उम्मीद के मुताबिक काम करने के लिए कुछ सेटअप सुझाव भी देगा। बस दिए गए निर्देशों का पालन करें, और आप जाने के लिए तैयार होंगे। <पी> इसके बाद, आइए एक उपयोगकर्ता मॉडल तैयार करें जिसके साथ डेविस काम करेगा। एक डिवाइस उपयोगकर्ता मॉडल तैयार करना
<पी> डेविस को एक उपयोगकर्ता मॉडल की आवश्यकता है। जिसे आप यह मॉडल कहते हैं, वह पूरी तरह से आपकी प्राथमिकताओं और आपके ऐप के उपयोग के मामले पर निर्भर है, लेकिन यह आमतौर पर या तोUser होता है। या Admin . <पी> आगे बढ़ें और bundle exec rails g devise User के साथ एक डेविस उपयोगकर्ता मॉडल तैयार करें . यह एक User उत्पन्न करेगा app/models/user.rb के अंतर्गत मॉडल , उपयोगकर्ता तालिका बनाने के लिए एक माइग्रेशन फ़ाइल, और उपयोगकर्ता संसाधन तक पहुंचने के लिए एक मार्ग: <पी> bundle exec rails db:migrate चलाएँ माइग्रेशन चलाने और उपयोगकर्ता तालिका सेट करने के लिए। ऐसा करने के बाद, अब हमारे पास एक उपयोगकर्ता मॉडल है जिसका उपयोग हम सभी चीज़ों के प्रमाणीकरण के लिए कर सकते हैं। <पी> इसके बाद, आइए आगे बढ़ने के लिए उपयोग करने के लिए एक कार्य मॉडल सेट करें। एक कार्य मॉडल तैयार करना
<पी> याद रखें, डेविस का उपयोग करते हुए, हमारे सरल ऐप को यह करना होगा:- उपयोगकर्ता को पंजीकरण के लिए सक्षम करें।
- उपयोगकर्ता को ऐप में साइन इन और आउट करने में सक्षम करें।
- उपयोगकर्ता को एक ऐसा कार्य बनाने में सक्षम करें जो उनका होगा।
- किसी उपयोगकर्ता को उनकी भूमिका के आधार पर किसी कार्य के साथ इंटरैक्ट करने की अनुमति दें (या अस्वीकार करें)।
bundle exec rails db:migrate चलाएँ कार्य तालिका बनाने के लिए. यह भी सुनिश्चित करें कि आप किसी कार्य को किसी उपयोगकर्ता से संबंधित करें: <पी> जब आप मचान जनरेटर चलाते हैं, तो संबंध belongs_to :users होता है स्वचालित रूप से कार्य मॉडल में जोड़ दिया जाएगा. फिर भी, enum का उपयोग करने के लिए कार्य मॉडल को संपादित करें स्थिति के लिए जैसा कि नीचे दिखाया गया है: <पी> इसके साथ, अब हम डेविस में गहराई से उतरने के लिए तैयार हैं। आइए डेविस के मॉड्यूल के संक्षिप्त अवलोकन से शुरुआत करें। रूबी के लिए डिवाइस में मॉड्यूल
<पी> जैसा कि हमने परिचय में बताया है, डेविस की प्रमुख विशेषताओं में से एक इसकी मॉड्यूलरिटी है। लेकिन इस मामले में "मॉड्यूलैरिटी" का वास्तव में क्या मतलब है? इसका सीधा सा मतलब है कि प्रमाणीकरण प्रक्रिया को स्वतंत्र रूप से प्रबंधित करने के लिए अलग-अलग हिस्सों में अलग करना। <पी> डेविस के नवीनतम संस्करण (लेखन के समय) में 10 मॉड्यूल शामिल हैं:- डेटाबेस प्रमाणीकृत - यह मॉड्यूल उपयोगकर्ता द्वारा प्रदत्त पासवर्ड लेगा और इसे एक सुरक्षित हैश में बदल देगा जिसे बाद में डेटाबेस में संग्रहीत किया जाएगा। जब कोई उपयोगकर्ता साइन इन करता है तो मॉड्यूल सत्यापन भी संभालता है।
- सर्वप्रमाणनीय - ओमनीऑथ प्रमाणीकरण सक्षम करता है।
- लॉक करने योग्य - यह मॉड्यूल विफल लॉगिन की संख्या के आधार पर किसी खाते को लॉक कर देगा। एक निश्चित समयावधि के बाद या ईमेल के माध्यम से खाते को फिर से पहुंच योग्य बना दिया जाता है।
- ट्रैक करने योग्य - किसी खाते द्वारा किए गए लॉगिन की संख्या, उपयोग किए गए आईपी पते और लॉगिन टाइमस्टैम्प को ट्रैक करता है।
- पुष्टि योग्य - खाता पंजीकृत होने पर पुष्टिकरण निर्देशों के साथ एक ईमेल भेजता है और यह भी जांच करेगा कि लॉग इन करने पर उपयोगकर्ता का खाता पुष्टिकृत है या नहीं।
- पंजीकरण योग्य - उपयोगकर्ताओं को आपके ऐप पर एक खाता पंजीकृत करने की अनुमति देता है, और खाता संपादन और विनाश को संभालता है।
- पुनर्प्राप्ति योग्य - पासवर्ड रीसेट और खाता पुनर्प्राप्ति संभालता है।
- समयबाह्य - एक निर्दिष्ट समय बीत जाने के बाद उपयोगकर्ता सत्र समाप्त हो जाता है।
- मान्य - यह आपको खाता निर्माण के दौरान उपयोगकर्ता द्वारा प्रदत्त ईमेल और पासवर्ड के लिए कस्टम सत्यापन नियम परिभाषित करने देता है।
- यादगार - प्रमाणीकरण के दौरान उपयोगकर्ता को याद रखने के लिए कुकी का उपयोग करता है।
सहायक और फ़िल्टर तैयार करें
<पी> डेविस जैसी प्रमाणीकरण लाइब्रेरी का उपयोग करने का एक कारण नियंत्रक संसाधनों और संबंधित दृश्यों तक पहुंच का प्रबंधन करना है। डेविस सुविधाजनक सहायकों के एक सेट के साथ आता है, जिसमें शामिल हैं: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- एक दृश्य के साथ प्रतिक्रिया करता है जिसमें नए उपयोगकर्ताओं को पंजीकृत करने के लिए एक पंजीकरण फॉर्म है।
before_action देता है फ़िल्टर का उपयोग आप इस प्रकार कर सकते हैं: <पी> इसके साथ, आइए अब इस बात पर ध्यान केंद्रित करें कि डेविस रेल के मजबूत मापदंडों के साथ कैसे एकीकृत होता है। डिवाइस और रूबी ऑन रेल्स के मजबूत पैरामीटर
<पी> मजबूत पैरामीटर रूबी ऑन रेल्स की एक प्रसिद्ध सुविधा है जो वस्तुओं के लिए अनुरोध पैरामीटर के बड़े पैमाने पर असाइनमेंट को रोकती है। मजबूत पैरामीटर के लिए आवश्यक है कि किसी भी असाइनमेंट को करने से पहले अनुरोध पैरामीटर को स्पष्ट रूप से घोषित किया जाए, आमतौर पर नियंत्रक स्तर पर। <पी> डिवाइसेज़ उपयुक्त डिवाइस-विशिष्ट नियंत्रक क्रियाओं के अंतर्गत पैरामीटरों को स्पष्ट रूप से परिभाषित करने की आवश्यकता के द्वारा इस कार्यक्षमता को प्रतिबिंबित करता है:sign_up- डिफ़ॉल्ट रूप से, यह डेविस कंट्रोलर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अनुमति है.
before_action का उपयोग करना है ApplicationController में फ़िल्टर करें , जैसे यहाँ, जहाँ हम एक username जोड़ते हैं वह कुंजी जो उपयोगकर्ता द्वारा साइन अप करते समय आवश्यक होती है: <पी> डेविस के मजबूत मापदंडों के लिए एक दिलचस्प उपयोग मामला तब होता है जब आपको डेविस सैनिटाइज़र के लिए कुंजियों की एक श्रृंखला को पारित करने की आवश्यकता होती है। उदाहरण के लिए, मान लें कि हमारे पास एक फ्रीलांसर मार्केटप्लेस ऐप है जहां एक उपयोगकर्ता किराये के लिए "ठेकेदार" हो सकता है, या एक "नियोक्ता" जो अन्य ठेकेदारों को काम पर रख सकता है, या एक ही समय में एक ठेकेदार और नियोक्ता हो सकता है। <पी> बहुत अधिक तकनीकी विवरणों में जाए बिना, हम उपयोगकर्ताओं को संबंधित भूमिकाओं - "ठेकेदार" और "नियोक्ता" के लिए दो चुनिंदा बक्सों का उपयोग करके अपने खाते को अपडेट करने की अनुमति देकर इस कार्यक्षमता को प्राप्त कर सकते हैं - ताकि उपयोगकर्ता इनमें से कोई एक या दोनों विकल्प चुन सके। <पी> इसे प्राप्त करने का एक त्वरित तरीका कुंजी के रूप में भूमिकाओं के साथ एक सरणी का उपयोग करना है, लेकिन रेल के मजबूत पैरामीटर केवल निम्नलिखित स्केलर मानों की अनुमति देते हैं:String , Symbol , NilClass , Numeric , TrueClass , FalseClass , Date , Time , DateTime , StringIO , IO , ActionDispatch::Http::UploadedFile , और Rack::Test::UploadedFile . जैसा कि आप देख सकते हैं, ऐरे, हैश और अन्य ऑब्जेक्ट, डिफ़ॉल्ट रूप से, अनुमति नहीं हैं। <पी> एक ऐसी सरणी का उपयोग करने के लिए जो हमारे उपयोगकर्ता के लिए एकाधिक भूमिकाओं की अनुमति देती है, हम नीचे दिखाए अनुसार अपने कोड को संशोधित कर सकते हैं: <पी> सहायकों पर डिवाइसेज़ दस्तावेज़ीकरण विषय को अधिक विस्तार से कवर करता है। <पी> इसके बाद, हम सीखेंगे कि डेविस के दृश्यों और नियंत्रकों को कैसे अनुकूलित किया जाए। डिवाइस दृश्यों को अनुकूलित करना
<पी> चूँकि डेविस को रेल इंजन के रूप में बनाया गया है, इसके लगभग सभी घटक पहले से पैक किए गए हैं। इसके अच्छे उदाहरणों में लॉग इन करने, साइन अप करने, खाता विवरण अपडेट करने, अपना पासवर्ड रीसेट करने आदि के लिए दृश्य शामिल हैं। ऐप बनाने की आपकी यात्रा में कुछ बिंदु पर, आपको अपनी आवश्यकताओं के अनुरूप इन अंतर्निहित दृश्यों को अनुकूलित करने की आवश्यकता हो सकती है। <पी> पहला कदम कमांडbundle exec rails g devise:views का उपयोग करके दृश्य उत्पन्न करना है . जब आप ऐसा करते हैं, तो संबंधित दृश्य उत्पन्न होते हैं और app/views/devise में रखे जाते हैं फ़ोल्डर: <पी>
<पी> आइए डेविस के विचारों को अनुकूलित करने के एक व्यावहारिक उदाहरण का उपयोग करें। पिछले अनुभाग में, हमने सीखा कि डेविस सैनिटाइज़र में अतिरिक्त प्रमाणीकरण कुंजी कैसे जोड़ें। आइए अब username जोड़ने के लिए उस उदाहरण का विस्तार करें उपयोगकर्ता पंजीकरण दृश्य के लिए फ़ील्ड। <पी> username के बाद से फ़ील्ड हमारे डिफ़ॉल्ट उपयोगकर्ता मॉडल के लिए उपलब्ध नहीं है, हम इसे bundle exec rails g migration add_column_username_to_user username का उपयोग करके जोड़ देंगे प्रवास. कमांड bundle exec rails db:migrate चलाएँ माइग्रेशन शुरू करने और उपयोगकर्ता तालिका में कॉलम जोड़ने के लिए। <पी> इसके बाद, नई उपयोगकर्ता पंजीकरण फ़ाइल खोलें और इसे निम्नानुसार संपादित करें: <पी> यदि आप सभी दृश्यों के साथ काम कर रहे हैं तो इस तरह से डेविस व्यू उत्पन्न करना ठीक है। लेकिन मान लीजिए कि आप केवल कुछ दृश्यों को अनुकूलित करना चाहते हैं। आप यह कैसे कर सकते हैं? ठीक है, आप बस जेनरेटर कमांड को दृश्य ध्वज bundle exec rails g devise:views -v sessions registrations को इंगित करके अपने इच्छित दृश्यों की एक सूची पास कर देते हैं। . इस मामले में, यह केवल लॉगिन/लॉगआउट प्रक्रिया से जुड़े दृश्य और साइन-अप को संभालने वाले दृश्य उत्पन्न करता है। <पी> आगे बढ़ते हुए, आइए लाइब्रेरी के नियंत्रकों और मार्गों को अनुकूलित करने का तरीका सीखकर डिवाइसेस अनुकूलन के बारे में और गहराई से जानें। डिवाइस नियंत्रकों और मार्गों को अनुकूलित करना
<पी> डेविस के विचारों को अनुकूलित करना ही आपको इतनी दूर तक ले जा सकता है। यदि आप वास्तविक अनुकूलन चाहते हैं, तो आपको लाइब्रेरी के नियंत्रकों और मार्गों में जाना होगा। <पी> मान लीजिए कि हम अपने व्यवस्थापक को ऐप पर प्रत्येक नए उपयोगकर्ता पंजीकरण के बारे में सूचित करने के लिए एक ईमेल भेजना चाहते हैं। (यह चीजों के बारे में जाने का आदर्श तरीका नहीं है, लेकिन आइए इस उदाहरण के साथ यह स्पष्ट करें कि हम क्या चाहते हैं)। <पी> आरंभ करने के लिए, हमेंDevise::RegistrationsController की साइनअप क्रिया को संशोधित करना होगा . आम तौर पर, डेविस के नियंत्रक संपादन के लिए सीधे पहुंच योग्य नहीं होते हैं, इसलिए, जैसा कि हमने दृश्यों के साथ किया था, हम उन्हें इस तरह उत्पन्न कर सकते हैं: <पी> उस कमांड का अंतिम बिट स्कोप है - इस मामले में, users . यदि आप चाहते हैं कि यह कुछ और हो, तो आप इसे अपने अनुसार बदल सकते हैं। जब आपका काम पूरा हो जाए, तो जेनरेट किए गए नियंत्रक इस जैसी संरचना में होने चाहिए: <पी>
<पी> इसके बाद, रूट फ़ाइल खोलें और नियंत्रक संरचना में परिवर्तनों को प्रतिबिंबित करने के लिए डेविस के रूट को संशोधित करें: <पी> अब नए जेनरेट किए गए Users::RegistrationsController को खोलें और जब भी कोई नया उपयोगकर्ता साइन अप करता है तो व्यवस्थापक को एक ईमेल भेजने के लिए इसे संशोधित करें: <पी> जैसा कि आप देख सकते हैं, डेविस के नियंत्रकों और कार्यों तक पहुंच के साथ, आप अपने ऐप के प्रमाणीकरण प्रवाह को अपनी इच्छानुसार संशोधित कर सकते हैं।