JSON:API क्या नहीं करता
JSON:API पूरी तरह से एंटिटी-आधारित है। यानी यह ऐसे बिज़नेस नियमों को प्रोसेस नहीं कर सकता या वे काम नहीं कर सकता जिन्हें “CRUD” के रूप में नहीं सोचा जा सकता। बिज़नेस लॉजिक, जैसे नया अकाउंट रजिस्टर करना, किसी यूज़र को लॉगिन कराना, या नया पासवर्ड रिक्वेस्ट करना JSON:API का हिस्सा नहीं है। इनमें से कई क्षमताएँ पहले से ही Drupal core द्वारा प्रदान की जाती हैं।
आम आवश्यकताओं और उनके समाधानों की एक अपूर्ण (non-exhaustive) सूची नीचे दी गई है।
रुचि के पथ (Paths of interest):
- /session/token
- /user/register
- /user/login
- /user/login_status
- /user/logout
सेशन टोकन प्राप्त करना
टोकन प्राप्त करें
curl \
--request GET http://drupal.d8/session/token
प्रतिक्रिया बॉडी में टोकन साधारण टेक्स्ट (JSON नहीं) के रूप में लौटाया जाता है।
टोकन्स का उपयोग
लॉगिन करने पर सेशन टोकन के अलावा आपको एक csrf_token
और एक logout_token
भी मिलता है। यूज़र को सिस्टम से लॉगआउट कराने के लिए आपको logout_token
की आवश्यकता होगी (नीचे देखें)। csrf_token
या सेशन टोकन, बदलने योग्य (mutable) अनुरोधों—जैसे POST, PATCH और DELETE—के लिए आवश्यक है।
यूज़र रजिस्ट्रेशन
जहाँ core द्वारा उपलब्ध JSON:API नए यूज़र रजिस्ट्रेशन का समर्थन नहीं करता, वहाँ आप JSON:API User Resources मॉड्यूल इंस्टॉल कर सकते हैं ताकि यूज़र-संबंधित JSON:API एंडपॉइंट्स जोड़े जा सकें, जिनमें रजिस्ट्रेशन, पासवर्ड रीसेट करना और पासवर्ड अपडेट करना शामिल है।
वैकल्पिक रूप से, आप core REST मॉड्यूल का उपयोग कर सकते हैं। REST के जरिए यूज़र्स को अकाउंट रजिस्टर करने देने के लिए, user_registration REST रिसोर्स को सक्षम होना चाहिए (नीचे दिए REST UI उदाहरण को देखें)।
curl \
--header "Content-Type: application/json" \
--header "X-CSRF-Token: 57sTS-KS7UoYAWAPyzt0iJmo300CFct3jdKyWM-UiiQ" \
--request POST "https://drupal.d9/user/register?_format=json" \
--data '{"name": {"value": "thename123"}, "pass": {"value": "thepass"}, "mail": {"value": "someone@example.com"}}'
X-CSRF-Token
हेडर में सेशन टोकन का मान उपयोग करें। सफल प्रतिक्रिया में कुछ यूज़र फ़ील्ड मान शामिल होने चाहिए, जिनमें नए बने यूज़र का UUID भी होगा:
{
"uuid" : [ { "value" : "3e75b757-831e-4bf7-bbb6-25b8c50c7ac0" } ]
}
यह भी ध्यान दें कि प्रतिक्रिया में “Set-Cookie” हेडर्स नहीं होते, भले ही विज़िटर्स को स्वयं अकाउंट बनाने की अनुमति हो। इसलिए, यदि कोई अनुमोदन या पुष्टि आवश्यक नहीं है, तो सफल रजिस्ट्रेशन के बाद आप उसी name और pass मानों से यूज़र को लॉगिन करा सकते हैं।
यूज़र लॉगिन
curl \
--header "Content-type: application/json" \
-c cookie.txt \
--request POST "http://drupal.d8/user/login?_format=json" \
--data '{"name":"admin", "pass":"admin"}'
-c cookie.txt
curl को एक कुकी सेव करने के लिए कहता है। आपकी प्रतिक्रिया कुछ इस प्रकार दिखेगी:
{
"csrf_token" : "57sTS-KS7UoYAWAPyzt0iJmo300CFct3jdKyWM-UiiQ",
"logout_token" : "zzRaD8ZgLT1TkG804mYpVVTyM-pgoDm4h9XZ9JHSoCw",
"current_user" : {
"roles" : [
"authenticated",
"administrator"
],
"name" : "admin",
"uid" : "1"
}
}
यूज़र स्टेटस
curl \
--header "Content-type: application/json" \
-b cookie.txt \
--request GET "http://drupal.d8/user/login_status?_format=json"
-b cookie.txt
curl को पिछली रिक्वेस्ट से कुकी भेजने (सेव नहीं करने) के लिए कहता है। यदि आप लॉगिन हैं, तो प्रतिक्रिया बॉडी में सादा टेक्स्ट (JSON नहीं) के रूप में 1
लौटेगा, अन्यथा 0
।
यूज़र लॉगआउट
curl \
--header "Content-type: application/json" \
-b cookie.txt \
--request POST "http://drupal.d8/user/logout?_format=json&token=zzRaD8ZgLT1TkG804mYpVVTyM-pgoDm4h9XZ9JHSoCw"
यह cookie.txt
द्वारा प्रमाणित यूज़र को लॉगआउट कर देगा। क्वेरी पैरामीटर token
में logout_token
का मान उपयोग करें।
प्रमाणीकरण तंत्र (Authentication Mechanisms)
ऊपर दिया गया उदाहरण उपलब्ध कई प्रमाणीकरण तंत्रों में से केवल एक है। आपको अपनी आवश्यकताओं के अनुसार उपयुक्त तंत्र का चयन करना चाहिए।
Drupal के लिए OAuth मॉड्यूल simple_oauth के रूप में उपलब्ध है।
संदर्भ (References)
अधिक जानकारी के लिए इन चेंज रिकॉर्ड्स को देखें:
- https://www.drupal.org/node/2720655 (login, login_status और logout)
- https://www.drupal.org/node/2752071 (register)
प्रमाणीकरण के लिए, आप अन्य प्रमाणीकरण प्रोटोकॉल का उपयोग करने पर भी विचार कर सकते हैं।
यदि आपने फ्रंटएंड पर अपनी जावास्क्रिप्ट एप्लिकेशन और बैकएंड पर Drupal के साथ “कूकी” वाला तरीका अपनाने का निर्णय लिया है, तो ब्राउज़र आपके लिए सभी कुकी स्टोरेज का काम कर सकता है। बस यह न भूलें कि यदि आपका JS ऐप और Drupal साइट अलग डोमेन नाम रखते हैं, तो उपयोगकर्ताओं की सेशन कुकीज़ स्टोर करने देने के लिए आपको SameSite कुकी पैरामीटर को “None” में बदलना होगा। इसके लिए, अपनी services.yml
फ़ाइल एडिट करें और निम्न पैरामीटर जोड़ें:
parameters:
session.storage.options:
cookie_samesite: None
REST UI
REST UI contrib मॉड्यूल core के REST मॉड्यूल के संसाधनों को कॉन्फ़िगर करने देता है। आइए देखें कि इस मॉड्यूल के साथ हम यूज़र रजिस्ट्रेशन कैसे सक्षम कर सकते हैं।
- REST UI मॉड्यूल इंस्टॉल और एनेबल करने के बाद /admin/config/services/rest पर कॉन्फ़िगरेशन पेज पर जाएँ और “User registration” रिसोर्स सक्षम करें। रिसोर्स को एडिट करके, उदाहरण के लिए, POST मेथड, JSON फ़ॉर्मेट और Cookie प्रोवाइडर सक्षम करें। ग्रैन्युलरिटी को “method” पर स्विच करने से आप प्रत्येक रिक्वेस्ट मेथड के लिए फ़ॉर्मैट्स और प्रोवाइडर्स को अलग-अलग सेट कर सकते हैं।
- फिर, /admin/people/permissions/module/rest पर अनाम (anonymous) यूज़र्स को “Access POST on User registration resource” अनुमति प्रदान करें।
- अंत में, /admin/config/people/accounts पर सुनिश्चित करें कि विज़िटर्स स्वयं अकाउंट बना सकें।
लेख स्रोत: Drupal Documentation.