मेरे सर्वर में मैन्युअल प्रमाणीकरण है। मुझे अपने सर्वर के उपयोगकर्ता नाम/पासवर्ड को मेरे रीढ़ की हड्डी के अनुरोध में जाने की आवश्यकता है। मैं यह कैसे कर सकता हूँ? कोई विचार? धन्यवादरीढ़ की हड्डी पर अनुरोध शीर्षलेख
उत्तर
बैकबोन में मॉडल fetch
, save
, और destroy
विधियों का उपयोग करके डेटा पुनर्प्राप्त, अद्यतन और नष्ट कर सकते हैं। ये विधियां Backbone.sync को वास्तविक अनुरोध भाग का प्रतिनिधि करती हैं। हुड के तहत, सभी Backbone.sync
कर रहा है jQuery का उपयोग कर AJAX अनुरोध बना रहा है। अपने मूल HTTP प्रमाणीकरण को शामिल करने के लिए आपके पास कुछ विकल्प हैं।
fetch
, save
, और destroy
सभी अतिरिक्त पैरामीटर [options]
स्वीकार करते हैं। ये [options]
बस jQuery अनुरोध विकल्पों का एक शब्दकोश है जो jQuery AJAX कॉल में शामिल हो जाता है। इसका मतलब है आप आसानी से एक सरल तरीका है जिसके प्रमाणीकरण संलग्न कर देता है परिभाषित कर सकते हैं:
sendAuthentication = function (xhr) {
var user = "myusername";// your actual username
var pass = "mypassword";// your actual password
var token = user.concat(":", pass);
xhr.setRequestHeader('Authorization', ("Basic ".concat(btoa(token))));
}
और यह प्रत्येक fetch
, save
में शामिल हैं, और destroy
आप कर कहते हैं। इस प्रकार:
fetch({
beforeSend: sendAuthentication
});
यह पुनरावृत्ति का थोड़ा सा निर्माण कर सकता है। एक और विकल्प Backbone.sync
विधि को ओवरराइड करने के लिए हो सकता है, मूल कोड कॉपी करें और केवल प्रत्येक jQuery AJAX अनुरोध में beforeSend
विकल्प शामिल करें।
आशा है कि इससे मदद मिलती है!
बैकबोन.जेएस में अनुरोध शीर्षलेख जोड़ने का सबसे आसान तरीका यह है कि उन्हें केवल चरम विधि पर पैरामीटर के रूप में पास करना है, उदा।
MyCollection.fetch({ headers: {'Authorization' :'Basic USERNAME:PASSWORD'} });
यह मेरे लिए काम करता है, आश्चर्य की बात है! और जब तक मैं किसी को आश्चर्यचकित कर रहा हूं, तब तक यह दस्तावेज़ों में नहीं है। इसे संभालने के लिए बेहद आसान तरीका;) अद्भुत। > धन्यवाद! – albertpeiro
जो उपयोगकर्ता नाम के पास तक काम करता है: इसमें, आपको वास्तव में बेसकोड एन्कोड उपयोगकर्ता नाम होना चाहिए: पासवर्ड – dstarh
Object.save(
{'used': true}
{headers: {'Access-Token': 'access_token'}}
)
क्या वह वैश्विक है? – Trip
यह वही उत्तर है [उपरोक्त 'उदाहरण ऊपर] (https://stackoverflow.com/a/11846129/1218980), लेकिन बिना किसी स्पष्टीकरण के। –
आप रीढ़ सिंक विधि रद्द कर सकते थे।
#coffeescript
_sync = Backbone.sync
Backbone.sync = (method, model, options) ->
options.beforeSend = (xhr) ->
xhr.setRequestHeader('X-Auth-Token_or_other_header' , your_hash_key)
#make sure your server accepts X-Auth-Token_or_other_header!!
#calling the original sync function so we only overriding what we need
_sync.call(this, method, model, options)
एक विकल्प jQuery AJAXSetup का उपयोग करने के लिए हो सकता है, सभी बैकबोन अनुरोध अंततः अंतर्निहित jQuery AJAX का उपयोग करेंगे। इस दृष्टिकोण का लाभ यह है कि आपको केवल इसे एक स्थान जोड़ना होगा।
$.ajaxSetup({
headers: { 'Authorization' :'Basic USERNAME:PASSWORD' }
});
2 संपादित करें जनवरी 2018 जटिल वेब एप्लिकेशन के लिए यह सबसे अच्छा तरीका नहीं हो सकता है, नीचे टिप्पणी देखें। संदर्भ के लिए यहां उत्तर छोड़ना।
ऐसा लगता है कि यह काम कर सकता है, ** इस ** का उपयोग किसी अन्य उत्तर में वर्णित कारणों के लिए नहीं करें [https://stackoverflow.com/a/41991573/1218980)। –
मैं सहमत होना चाहूंगा, मेरा जवाब अब बहुत पुराना है। एकमात्र चीज जो मैं कहूंगा वह यह है कि यदि आप एक डेटा स्रोत के साथ एक साधारण प्रयोग पर काम कर रहे हैं तो यह जाने का एक त्वरित तरीका होगा। तो मैं इसे संदर्भ के लिए यहां छोड़ सकता हूं। –
Backbone.$.ajaxSetup({
headers: {'Authorization' :'Basic USERNAME:PASSWORD'}
});
यह कोड बैकबोन AJAX पर शीर्षलेख सेट करता है, इसलिए उन्हें प्रत्येक Backbone.sync के साथ भेजा जाएगा। आप प्रत्येक सिंक कॉल के साथ xhr.setRequestHeader
का उपयोग किये बिना हेडर भेजने में सक्षम होंगे।
तो तुम हर बार निम्न कार्य करने की जरूरत नहीं है:
MyCollection.fetch({ headers: {'Authorization' :'Basic USERNAME:PASSWORD'} });
तुम बस
MyCollection.fetch();
कर सकते हैं हो सकता है कि यह एक तरह की हैक है, लेकिन यह अपने सिस्टम के लिए पूरी तरह से काम करता है।
शायद आप इस बारे में एक स्पष्टीकरण दे सकते हैं कि यह प्रश्न का उत्तर कैसे देता है? –
धन्यवाद, यह बहुत अच्छा काम किया। – Cymen
यह एक हैक है जिसका उपयोग [मेरे दूसरे जवाब] में सूचीबद्ध कारणों के लिए नहीं किया जाना चाहिए (https://stackoverflow.com/a/41991573/1218980)। यह वही उत्तर है [ऊपर '$ .ajaxSetup' ऊपर] (https://stackoverflow.com/a/20633326/1218980)। –
इस तरह से कुछ करने का मेरा दृष्टिकोण अनुरोध करने से पहले हेडर जोड़ने के लिए सिंक विधि को ओवरराइट कर देगा। उदाहरण में आप देख सकते हैं कि मैं Backbone.AuthenticatedModel
बना रहा हूं, जो Backbone.Model
से फैला हुआ है।
यह सभी तरीकों (प्राप्त, पोस्ट, हटाएँ, आदि)
Backbone.AuthenticatedModel = Backbone.Model.extend({
sync: function(method, collection, options){
options = options || {};
options.beforeSend = function (xhr) {
var user = "myusername";// your actual username
var pass = "mypassword";// your actual password
var token = user.concat(":", pass);
xhr.setRequestHeader('Authorization', ("Basic ".concat(btoa(token))));
};
return Backbone.Model.prototype.sync.apply(this, arguments);
}
});
प्रभाव होगा तो फिर तुम सरल करने के लिए है से Backbone.AuthenticatedModel
आपके द्वारा बनाए गए मॉडल आप प्रमाणीकरण की आवश्यकता है, का विस्तार:
var Process = Backbone.AuthenticatedModel.extend({
url: '/api/process',
});
मुझे आपका समाधान पसंद है! लेकिन वापसी लाइन में मैं 'Backbone.Model.prototype.sync.apply (यह, तर्क) 'को इसके बजाय कॉल करूंगा। –
@ क्रिस्टियन-कॉन्डेरा आप सही हैं, यह एक और अधिक सुरुचिपूर्ण और सही तरीका होगा। जैसा कि आपने –
सुझाया है, कोड को बदल दिया है, मैं पहले कॉलबैक भेजने के पहले नए 'पहले सेन्डेंड' विकल्प (यदि पास हो गया) में एक कॉल जोड़ूंगा। संदर्भ के लिए एनोटेटेड स्रोत देखें: http://backbonejs.org/docs/backbone.html#section-179 –
ग्राहक के पक्ष में, किसी भी सर्वर संचार से पहले इस जोड़ें:
$.ajaxSetup({ xhrFields: { withCredentials: true }, async: true });
सर्वर साइड में (PHP) इन हेडर जोड़ें:
header('Access-Control-Allow-Origin: http://your-client-app-domain'); header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS"); header("Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With"); header('Access-Control-Allow-Credentials: true');
कस्टम समन्वयन विधि है कि Backbone.sync के लिए कॉल को बीच में रोक और में अपने प्राधिकरण हेडर सामान और सब कुछ गुजरता के माध्यम से बनाएं :
REPORTING_API_KEY = 'secretKeyHere';
CustomSync = function(method, model, options) {
options.headers = {
'Authorization' : 'Bearer ' + REPORTING_API_KEY
};
return Backbone.sync(method, model, options);
};
तो यह है कि एक के साथ अपने मॉडल की समन्वयन के ऊपर लिख:
MyModel = Backbone.Model.extend({
urlRoot: '/api/',
sync: CustomSync
});
यह एक अच्छा तरीका है, लेकिन 'सिंक' फ़ंक्शन को ओवरराइट करने की बजाय, आपको इसे ओवरराइड करना चाहिए और माता-पिता को कॉल करना चाहिए 'Backbone.sync' होने की गारंटी नहीं है। –
- 1. रीढ़ की हड्डी
- 2. रीढ़ की हड्डी मॉडल
- 3. रीढ़ की हड्डी
- 4. रीढ़ की हड्डी जेएस
- 5. रीढ़ की हड्डी जेएस
- 6. रीढ़ की हड्डी में एक कस्टम http शीर्षलेख रखें
- 7. ember.js रीढ़ की हड्डी शैली
- 8. रीढ़ की हड्डी और requjs
- 9. रीढ़ की हड्डी स्क्रॉल घटना
- 10. रीढ़ की हड्डी पैरामीटर नहीं भेजती
- 11. पार्स नेस्टेड जेसन रीढ़ की हड्डी संग्रह
- 12. jquery + रीढ़ की हड्डी/रीढ़/अंकुरित के mootools विकल्प है
- 13. सबव्यूज़ के साथ रीढ़ की हड्डी रूटिंग
- 14. आईडी द्वारा रीढ़ की हड्डी मॉडल निकालें?
- 15. एक रीढ़ की हड्डी जटिल मॉडल
- 16. बूटस्ट्रैप स्क्रॉलस्पी और रीढ़ की हड्डी रूटिंग
- 17. क्रमबद्ध रीढ़ की हड्डी संग्रह वर्णानुक्रम
- 18. जेएस रीढ़ की हड्डी जेएस वैश्विक मॉडल
- 19. रीढ़ की हड्डी देखें + google visualization api
- 20. रीढ़ की हड्डी किसी अन्य पृष्ठ पर जाएं
- 21. मॉडल विशेषताओं के आधार पर रीढ़ की हड्डी संग्रह
- 22. खोज फ़ॉर्म और परिणामों के लिए रीढ़ की हड्डी संरचना?
- 23. रीढ़ की हड्डी में घटनाओं के लिए तर्क पास करना
- 24. रीढ़ की हड्डी के पार्स फ़ंक्शन को ओवरराइड करना
- 25. रीढ़ की हड्डी तुलनाकर्ताओं को सही ढंग से कार्यान्वित करें
- 26. रीढ़ की हड्डी में एक फॉर्म से डेटा पढ़ें
- 27. विस्तार() अंडरस्कोर बनाम रीढ़ की हड्डी का उपयोग कर
- 28. एचटीएमएल के लिए रीढ़ की हड्डी के दृश्य को बाध्यकारी
- 29. रीढ़ की हड्डी/अंडरस्कोर के टेम्पलेट्स में लूप का उपयोग
- 30. सरल रीढ़ की हड्डी खोज पृष्ठ - आप यह कैसे करेंगे?
अपने कोड की कोशिश की। लेकिन कोई प्रतिक्रिया नहीं है। यह सेवा नहीं बुलाता है। – jongbanaag
कोई प्रतिक्रिया नहीं? या आप एक 401 प्रतिक्रिया कोड प्राप्त कर रहे हैं? – shanewwarren
नहीं। वैसे भी। क्या आप मुझे backbone.sync को हेडर पर ओवरराइड करने के तरीके पर एक नमूना कोड दे सकते हैं? – jongbanaag